diff --git a/README.md b/README.md index c94af32..a789323 100644 --- a/README.md +++ b/README.md @@ -41,239 +41,44 @@ When using with the Claude App, you need to set up your API key and URLs directl ## Tools đŸ› ī¸ -1. `create_or_update_file` - - - Create or update a single file in a GitLab project. 📝 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `file_path` (string): Path to create/update the file - - `content` (string): File content - - `commit_message` (string): Commit message - - `branch` (string): Branch to create/update the file in - - `previous_path` (optional string): Previous file path when renaming a file - - Returns: File content and commit details - -2. `push_files` - - - Push multiple files in a single commit. 📤 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `branch` (string): Branch to push to - - `files` (array): Array of files to push, each with `file_path` and `content` properties - - `commit_message` (string): Commit message - - Returns: Updated branch reference - -3. `search_repositories` - - - Search for GitLab projects. 🔍 - - Inputs: - - `search` (string): Search query - - `page` (optional number): Page number (default: 1) - - `per_page` (optional number): Results per page (default: 20, max: 100) - - Returns: Project search results - -4. `create_repository` - - - Create a new GitLab project. ➕ - - Inputs: - - `name` (string): Project name - - `description` (optional string): Project description - - `visibility` (optional string): Project visibility level (public, private, internal) - - `initialize_with_readme` (optional boolean): Initialize with README - - Returns: Details of the created project - -5. `get_file_contents` - - - Get the contents of a file or directory. 📂 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `file_path` (string): Path to the file/directory - - `ref` (optional string): Branch, tag, or commit SHA (default: default branch) - - Returns: File/directory content - -6. `create_issue` - - - Create a new issue. 🐛 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `title` (string): Issue title - - `description` (string): Issue description - - `assignee_ids` (optional number[]): Array of assignee IDs - - `milestone_id` (optional number): Milestone ID - - `labels` (optional string[]): Array of labels - - Returns: Details of the created issue - -7. `create_merge_request` - - - Create a new merge request. 🚀 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `title` (string): Merge request title - - `description` (string): Merge request description - - `source_branch` (string): Branch with changes - - `target_branch` (string): Branch to merge into - - `allow_collaboration` (optional boolean): Allow collaborators to push commits to the source branch - - `draft` (optional boolean): Create as a draft merge request - - Returns: Details of the created merge request - -8. `fork_repository` - - - Fork a project. 🍴 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path to fork - - `namespace` (optional string): Namespace to fork into (default: user namespace) - - Returns: Details of the forked project - -9. `create_branch` - - - Create a new branch. đŸŒŋ - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `name` (string): New branch name - - `ref` (optional string): Ref to create the branch from (branch, tag, commit SHA, default: default branch) - - Returns: Created branch reference - -10. `get_merge_request` - - - Get details of a merge request. â„šī¸ - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `merge_request_iid` (number): Merge request IID - - Returns: Merge request details - -11. `get_merge_request_diffs` - - - Get changes (diffs) of a merge request. diff - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `merge_request_iid` (number): Merge request IID - - `view` (optional string): Diff view type ('inline' or 'parallel') - - Returns: Array of merge request diff information - -12. `update_merge_request` - - - Update a merge request. 🔄 - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `merge_request_iid` (number): Merge request IID - - `title` (optional string): New title - - `description` (string): New description - - `target_branch` (optional string): New target branch - - `state_event` (optional string): Merge request state change event ('close', 'reopen') - - `remove_source_branch` (optional boolean): Remove source branch after merge - - `allow_collaboration` (optional boolean): Allow collaborators to push commits to the source branch - - Returns: Updated merge request details - -13. `create_note` - - Create a new note (comment) to an issue or merge request. đŸ’Ŧ - - Inputs: - - `project_id` (string): Project ID or namespace/project_path - - `noteable_type` (string): Type of noteable ("issue" or "merge_request") - - `noteable_iid` (number): IID of the issue or merge request - - `body` (string): Note content - - Returns: Details of the created note - -14. `list_projects` - - List accessible projects with rich filtering options 📊 - - Inputs: - - Search/filtering: - - `search` - - `owned` - - `membership` - - `archived` - - `visibility` - - Features filtering: - - `with_issues_enabled` - - `with_merge_requests_enabled` - - Sorting: - - `order_by` - - `sort` - - Access control: - - `min_access_level` - - Pagination: - - `page` - - `per_page` - - `simple` - - Returns: Array of projects -15. `list_labels` - - List all labels for a project with filtering options đŸˇī¸ - - Inputs: - - `project_id` (string): Project ID or path - - `with_counts` (optional): Include issue and merge request counts - - `include_ancestor_groups` (optional): Include ancestor groups - - `search` (optional): Filter labels by keyword - - Returns: Array of labels -16. `get_label` - - Get a single label from a project - - Inputs: - - `project_id` (string): Project ID or path - - `label_id` (number/string): Label ID or name - - `include_ancestor_groups` (optional): Include ancestor groups - - Returns: label details -17. `create_label` - - Create a new label in an object đŸˇī¸âž• - - Inputs: - - `project_id` (string): Project ID or path - - `name` (string): Label name - - `color` (string): Color in hex format (e.g., "#FF0000") - - `description` (optional): Label description - - `priority` (optional): Label priority - - Returns: Created label details -18. `update_label` - - Update an existing label in a project đŸˇī¸âœī¸ - - Inputs: - - `project_id` (string): Project ID or path - - `label_id` (number/string): Label ID or name - - `new_name` (optional): New label name - - `color` (optional): New color in hex format - - `description` (optional): New description - - `priority` (optional): New priority - - Returns: Updated label details -19. `delete_label` - - Delete a label from a project đŸˇī¸âŒ - - Inputs: - - `project_id` (string): Project ID or path - - `label_id` (number/string): Label ID or name - - Returns: Success message - -14. `list_group_projects` - - - List all projects in a GitLab group. 📂 - - Inputs: - - `group_id` (string): Project ID or namespace/project_path - - Filtering options: - - `include_subgroups` (optional boolean): Include projects from subgroups - - `search` (optional string): Search term to filter projects - - `archived` (optional boolean): Filter for archived projects - - `visibility` (optional string): Filter by project visibility (public/internal/private) - - `with_programming_language` (optional string): Filter by programming language - - `starred` (optional boolean): Filter by starred projects - - Feature filtering: - - `with_issues_enabled` (optional boolean): Filter projects with issues feature enabled - - `with_merge_requests_enabled` (optional boolean): Filter projects with merge requests feature enabled - - `min_access_level` (optional number): Filter by minimum access level - - Pagination: - - `page` (optional number): Page number - - `per_page` (optional number): Results per page - - Sorting: - - `order_by` (optional string): Field to sort by - - `sort` (optional string): Sort direction (asc/desc) - - Additional data: - - `statistics` (optional boolean): Include project statistics - - `with_custom_attributes` (optional boolean): Include custom attributes - - `with_security_reports` (optional boolean): Include security reports - - Returns: List of projects - -## Environment Variable Configuration - -Before running the server, you need to set the following environment variables: - -``` -GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token -GITLAB_API_URL=your_gitlab_api_url # Default: https://gitlab.com/api/v4 -GITLAB_READ_ONLY_MODE=true # Optional: Enable read-only mode -``` - -## License - -MIT License ++ +1. `create_or_update_file` - Create or update a single file in a GitLab project +2. `search_repositories` - Search for GitLab projects +3. `create_repository` - Create a new GitLab project +4. `get_file_contents` - Get the contents of a file or directory from a GitLab project +5. `push_files` - Push multiple files to a GitLab project in a single commit +6. `create_issue` - Create a new issue in a GitLab project +7. `create_merge_request` - Create a new merge request in a GitLab project +8. `fork_repository` - Fork a GitLab project to your account or specified namespace +9. `create_branch` - Create a new branch in a GitLab project +10. `get_merge_request` - Get details of a merge request +11. `get_merge_request_diffs` - Get the changes/diffs of a merge request +12. `update_merge_request` - Update a merge request +13. `create_note` - Create a new note (comment) to an issue or merge request +14. `mr_discussions` - List discussion items for a merge request +15. `update_merge_request_note` - Modify an existing merge request thread note +16. `list_issues` - List issues in a GitLab project with filtering options +17. `get_issue` - Get details of a specific issue in a GitLab project +18. `update_issue` - Update an issue in a GitLab project +19. `delete_issue` - Delete an issue from a GitLab project +20. `list_issue_links` - List all issue links for a specific issue +21. `get_issue_link` - Get a specific issue link +22. `create_issue_link` - Create an issue link between two issues +23. `delete_issue_link` - Delete an issue link +24. `list_namespaces` - List all namespaces available to the current user +25. `get_namespace` - Get details of a namespace by ID or path +26. `verify_namespace` - Verify if a namespace path exists +27. `get_project` - Get details of a specific project +28. `list_projects` - List projects accessible by the current user +29. `list_labels` - List labels for a project +30. `get_label` - Get a single label from a project +31. `create_label` - Create a new label in a project +32. `update_label` - Update an existing label in a project +33. `delete_label` - Delete a label from a project +34. `list_group_projects` - List projects in a GitLab group with filtering options +35. `list_wiki_pages` - List wiki pages in a GitLab project +36. `get_wiki_page` - Get details of a specific wiki page +37. `create_wiki_page` - Create a new wiki page in a GitLab project +38. `update_wiki_page` - Update an existing wiki page in a GitLab project +39. `delete_wiki_page` - Delete a wiki page from a GitLab project + diff --git a/package.json b/package.json index bf98371..24b2807 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "build": "tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"", "prepare": "npm run build", "watch": "tsc --watch", - "deploy": "npm publish --access public" + "deploy": "npm publish --access public", + "generate-tools": "npx ts-node scripts/generate-tools-readme.ts" }, "dependencies": { "@modelcontextprotocol/sdk": "1.8.0", diff --git a/scripts/generate-tools-readme.ts b/scripts/generate-tools-readme.ts new file mode 100644 index 0000000..c311e0c --- /dev/null +++ b/scripts/generate-tools-readme.ts @@ -0,0 +1,53 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +async function main() { + const repoRoot = path.resolve(__dirname, '..'); + const indexPath = path.join(repoRoot, 'index.ts'); + const readmePath = path.join(repoRoot, 'README.md'); + + // 1. Read index.ts + const code = fs.readFileSync(indexPath, 'utf-8'); + + // 2. Extract allTools array block + const match = code.match(/const allTools = \[([\s\S]*?)\];/); + if (!match) { + console.error('Unable to locate allTools array in index.ts'); + process.exit(1); + } + const toolsBlock = match[1]; + + // 3. Parse tool entries + const toolRegex = /name:\s*"([^"]+)",[\s\S]*?description:\s*"([^"]+)"/g; + const tools: { name: string; description: string }[] = []; + let m: RegExpExecArray | null; + while ((m = toolRegex.exec(toolsBlock)) !== null) { + tools.push({ name: m[1], description: m[2] }); + } + + // 4. Generate markdown + const lines = tools.map((tool, index) => { + return `${index + 1}. \`${tool.name}\` - ${tool.description}`; + }); + const markdown = lines.join('\n'); + + // 5. Read README.md and replace between markers + const readme = fs.readFileSync(readmePath, 'utf-8'); + const updated = readme.replace( + /([\s\S]*?)/, + `\n${markdown}\n` + ); + + // 6. Write back + fs.writeFileSync(readmePath, updated, 'utf-8'); + console.log('README.md tools section updated.'); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); \ No newline at end of file