@munichbughunter/dev-kit v0.0.2
Dev Kit - Model Context Protocol (MCP) Server
Dev Kit is a powerful Model Context Protocol (MCP) server designed to enhance AI model capabilities by providing seamless integration with various development tools and services. It serves as a bridge between AI models (like Claude) and essential development services such as Jira, Confluence, GitHub, and GitLab.
Overview
This TypeScript implementation of the Dev Kit server implements the Model Context Protocol, allowing AI models to interact with development tools in a structured and secure way. It's particularly useful for automating development workflows, managing documentation, and handling version control operations through natural language interactions.
Prerequisites
- Node.js 16.x or higher
- Various API keys and tokens for the services you want to use
Installation
Installing via npm
npm install -g dev-kitManual Installation from Source
- Clone the repository
- Install dependencies:
npm install - Build the project:
npm run prepare
Environment Variable Configuration
Before running the server, you need to set the following environment variables:
GITLAB_PERSONAL_ACCESS_TOKEN: Your GitLab personal access token.GITLAB_API_URL: Your GitLab API URL. Default:https://gitlab.com/api/v4GITLAB_READ_ONLY_MODE: Optional: Enable read-only mode. Default set to 'true', restricts the server to only expose read-only operations. Useful for enhanced security or when write access is not needed. Also useful for using with Cursor and it's 40 tool limit.
Claude Integration / VS-Code Integration
Configure Claude to use Dev Kit by adding this to your Claude configuration or VS-Code configuration:
"mcp": {
"servers": {
"dev-kit": {
"command": "npx",
"args": [
"-y",
"@munichbughunter/dev-kit",
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<ACCESS TOKEN>",
"GITLAB_API_URL": "<GITLAB API URL>",
"GITLAB_READ_ONLY_MODE": "false"
}
}
}
},Available Tools đ ī¸
Group: gitlab
create_or_update_file: Create or update a single file in a GitLab project. đ
- Inputs:
project_id(string): Project ID or namespace/project_pathfile_path(string): Path to create/update the filecontent(string): File contentcommit_message(string): Commit messagebranch(string): Branch to create/update the file inprevious_path(optional string): Previous file path when renaming a file
- Returns: File content and commit details
- Inputs:
push_files: Push multiple files in a single commit. đ¤
- Inputs:
project_id(string): Project ID or namespace/project_pathbranch(string): Branch to push tofiles(array): Array of files to push, each withfile_pathandcontentpropertiescommit_message(string): Commit message
- Returns: Updated branch reference
- Inputs:
search_repositories: Search for GitLab projects. đ
- Inputs:
search(string): Search querypage(optional number): Page number (default: 1)per_page(optional number): Results per page (default: 20, max: 100)
- Returns: Project search results
- Inputs:
create_repository: Create a new GitLab project. â
- Inputs:
name(string): Project namedescription(optional string): Project descriptionvisibility(optional string): Project visibility level (public, private, internal)initialize_with_readme(optional boolean): Initialize with README
- Returns: Details of the created project
- Inputs:
get_file_contents: Get the contents of a file or directory. đ
- Inputs:
project_id(string): Project ID or namespace/project_pathfile_path(string): Path to the file/directoryref(optional string): Branch, tag, or commit SHA (default: default branch)
- Returns: File/directory content
- Inputs:
create_issue: Create a new issue. đ
- Inputs:
project_id(string): Project ID or namespace/project_pathtitle(string): Issue titledescription(string): Issue descriptionassignee_ids(optional number[]): Array of assignee IDsmilestone_id(optional number): Milestone IDlabels(optional string[]): Array of labels
- Returns: Details of the created issue
- Inputs:
create_merge_request: Create a new merge request. đ
- Inputs:
project_id(string): Project ID or namespace/project_pathtitle(string): Merge request titledescription(string): Merge request descriptionsource_branch(string): Branch with changestarget_branch(string): Branch to merge intoallow_collaboration(optional boolean): Allow collaborators to push commits to the source branchdraft(optional boolean): Create as a draft merge request
- Returns: Details of the created merge request
- Inputs:
fork_repository: Fork a project. đ´
- Inputs:
project_id(string): Project ID or namespace/project_path to forknamespace(optional string): Namespace to fork into (default: user namespace)
- Returns: Details of the forked project
- Inputs:
create_branch: Create a new branch. đŋ
- Inputs:
project_id(string): Project ID or namespace/project_pathname(string): New branch nameref(optional string): Ref to create the branch from (branch, tag, commit SHA, default: default branch)
- Returns: Created branch reference
- Inputs:
get_merge_request: Get details of a merge request. âšī¸
- Inputs:
project_id(string): Project ID or namespace/project_pathmerge_request_iid(number): Merge request IID
- Returns: Merge request details
- Inputs:
get_merge_request_diffs: Get changes (diffs) of a merge request.
- Inputs:
project_id(string): Project ID or namespace/project_pathmerge_request_iid(number): Merge request IIDview(optional string): Diff view type ('inline' or 'parallel')
- Returns: Array of merge request diff information
- Inputs:
update_merge_request: Update a merge request. đ
- Inputs:
project_id(string): Project ID or namespace/project_pathmerge_request_iid(number): Merge request IIDtitle(optional string): New titledescription(string): New descriptiontarget_branch(optional string): New target branchstate_event(optional string): Merge request state change event ('close', 'reopen')remove_source_branch(optional boolean): Remove source branch after mergeallow_collaboration(optional boolean): Allow collaborators to push commits to the source branch
- Returns: Updated merge request details
- Inputs:
create_note: Create a new note (comment) to an issue or merge request. đŦ
- Inputs:
project_id(string): Project ID or namespace/project_pathnoteable_type(string): Type of noteable ("issue" or "merge_request")noteable_iid(number): IID of the issue or merge requestbody(string): Note content
- Returns: Details of the created note
- Inputs:
list_merge_request_discussions: List discussion items for a merge request. đŦ
- Inputs:
project_id(string): Project ID or namespace/project_pathmerge_request_iid(number): Merge request IID
- Returns: Merge request discussions
- Inputs:
update_merge_request_note: Modify an existing merge request thread note
- Inputs:
project_id(string): Project ID or namespace/project_pathmerge_request_iid(number): Merge request IIDdiscussion_id(string): The ID of a threadnote_id(number): The ID of a thread notebody(string): The content of the note or replyresolved(boolean): OPTIONAL: Resolve or unresolve the note
- Returns: Updated merge request note
- Inputs:
get_issue_link: Get a specific issue link.
- Inputs:
project_id(string): Project ID or namespace/project_pathissue_iid(number): The internal ID of a project's issueissue_link_id(number): ID of an issue relationship
- Returns: The issue link
- Inputs:
list_projects: List accessible projects with rich filtering options đ
- Inputs:
- Search/filtering:
searchownedmembershiparchivedvisibility
- Features filtering:
with_issues_enabledwith_merge_requests_enabled
- Sorting:
order_bysort
- Access control:
min_access_level
- Pagination:
pageper_pagesimple
- Search/filtering:
- Returns: Array of projects
- Inputs:
list_labels: List all labels for a project with filtering options đˇī¸
- Inputs:
project_id(string): Project ID or pathwith_counts(optional): Include issue and merge request countsinclude_ancestor_groups(optional): Include ancestor groupssearch(optional): Filter labels by keyword
- Returns: Array of labels
- Inputs:
get_label: Get a single label from a project
- Inputs:
project_id(string): Project ID or pathlabel_id(number/string): Label ID or nameinclude_ancestor_groups(optional): Include ancestor groups
- Returns: label details
- Inputs:
create_label: Create a new label in an object đˇī¸â
- Inputs:
project_id(string): Project ID or pathname(string): Label namecolor(string): Color in hex format (e.g., "#FF0000")description(optional): Label descriptionpriority(optional): Label priority
- Returns: Created label details
- Inputs:
update_label: Update an existing label in a project đˇī¸âī¸
- Inputs:
project_id(string): Project ID or pathlabel_id(number/string): Label ID or namenew_name(optional): New label namecolor(optional): New color in hex formatdescription(optional): New descriptionpriority(optional): New priority
- Returns: Updated label details
- Inputs:
delete_label: Delete a label from a project đˇī¸â
- Inputs:
project_id(string): Project ID or pathlabel_id(number/string): Label ID or name
- Returns: Success message
- Inputs:
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 subgroupssearch(optional string): Search term to filter projectsarchived(optional boolean): Filter for archived projectsvisibility(optional string): Filter by project visibility (public/internal/private)with_programming_language(optional string): Filter by programming languagestarred(optional boolean): Filter by starred projects
- Feature filtering:
with_issues_enabled(optional boolean): Filter projects with issues feature enabledwith_merge_requests_enabled(optional boolean): Filter projects with merge requests feature enabledmin_access_level(optional number): Filter by minimum access level
- Pagination:
page(optional number): Page numberper_page(optional number): Results per page
- Sorting:
order_by(optional string): Field to sort bysort(optional string): Sort direction (asc/desc)
- Additional data:
statistics(optional boolean): Include project statisticswith_custom_attributes(optional boolean): Include custom attributeswith_security_reports(optional boolean): Include security reports
- Returns: List of projects
- Inputs:
Development
To contribute to this project:
- Clone the repository
- Install dependencies:
npm install - Make your changes
- Build:
npm run prepare - Test your changes
License
MIT