| Crates.io | kodegen_tools_github |
| lib.rs | kodegen_tools_github |
| version | 0.10.9 |
| created_at | 2025-10-29 03:25:37.508991+00 |
| updated_at | 2026-01-02 15:08:30.601816+00 |
| description | KODEGEN.ᴀɪ: Memory-efficient, Blazing-Fast, MCP tools for code generation agents. |
| homepage | https://kodegen.ai |
| repository | https://github.com/cyrup-ai/kodegen-tools-github |
| max_upload_size | |
| id | 1906010 |
| size | 4,489,617 |
GitHub API operations via Octocrab with MCP tool wrappers for AI agents.
Create a new issue in a GitHub repository.
Arguments:
owner (string): Repository owner (user or organization)repo (string): Repository nametitle (string): Issue titlebody (string, optional): Issue description (Markdown supported)labels (arrayassignees (arrayExample:
{
"owner": "octocat",
"repo": "hello-world",
"title": "Bug: Login fails",
"body": "When I try to login, the form doesn't submit...",
"labels": ["bug", "priority-high"],
"assignees": ["octocat"]
}
Requirements:
Fetch a single issue by number.
Arguments:
owner (string): Repository ownerrepo (string): Repository nameissue_number (number): Issue numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"issue_number": 42
}
Returns:
number: Issue numbertitle: Issue titlebody: Issue descriptionstate: "open" or "closed"labels: Array of label objectsassignees: Array of assigned userscreated_at: Creation timestampupdated_at: Last update timestampcomments: Number of commentshtml_url: Link to issue on GitHubNote: issue_number is the issue number (e.g., #42), NOT the internal ID. Works for both issues and pull requests.
List and filter repository issues.
Arguments:
owner (string): Repository ownerrepo (string): Repository namestate (string, optional): "open" (default), "closed", or "all"labels (arrayassignee (string, optional): Filter by assignee usernamepage (number, optional): Page number for paginationper_page (number, optional): Results per page (max 100, default 30)Example:
{
"owner": "octocat",
"repo": "hello-world",
"state": "open",
"labels": ["bug"],
"per_page": 50
}
Filter behavior:
Update an existing issue.
Arguments:
owner (string): Repository ownerrepo (string): Repository nameissue_number (number): Issue numbertitle (string, optional): New titlebody (string, optional): New bodystate (string, optional): "open" or "closed"labels (arrayassignees (arrayExample:
{
"owner": "octocat",
"repo": "hello-world",
"issue_number": 42,
"state": "closed",
"labels": ["bug", "resolved"]
}
Important notes:
labels and assignees REPLACE existing values (not additive)state to "closed" to close an issue, "open" to reopenSearch issues across GitHub using GitHub's search syntax.
Arguments:
query (string): GitHub search query (supports complex syntax)sort (string, optional): "comments", "reactions", "created", "updated"order (string, optional): "asc" or "desc"page (number, optional): Page numberper_page (number, optional): Results per page (max 100)Search Query Syntax:
repo:owner/repo - Search in specific repositoryis:open / is:closed - Filter by statelabel:bug - Filter by labelassignee:username - Filter by assigneeauthor:username - Filter by authorinvolves:username - User is author, assignee, or mentionedcreated:>=2024-01-01 - Created after datecreated:2024-01-01..2024-12-31 - Date rangeExample:
{
"query": "repo:octocat/hello-world is:open label:bug created:>=2024-01-01",
"sort": "created",
"order": "desc",
"per_page": 20
}
Combined filters example:
repo:octocat/hello-world is:open label:bug assignee:alice created:>=2024-01-01
Important notes:
Add a comment to an existing issue.
Arguments:
owner (string): Repository ownerrepo (string): Repository nameissue_number (number): Issue numberbody (string): Comment text (Markdown supported)Example:
{
"owner": "octocat",
"repo": "hello-world",
"issue_number": 42,
"body": "This has been fixed in the latest release."
}
Markdown features:
Important notes:
Fetch all comments for an issue.
Arguments:
owner (string): Repository ownerrepo (string): Repository nameissue_number (number): Issue numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"issue_number": 42
}
Returns: Array of comment objects with:
id: Comment IDbody: Comment text (Markdown)user: Author information (login, avatar_url, etc.)created_at: When comment was createdupdated_at: When comment was last editedhtml_url: Link to comment on GitHubauthor_association: Relationship to repo (OWNER, CONTRIBUTOR, etc.)Comment ordering:
created_at timestamp to determine comment ageauthor_association to see if author is repo owner/maintainerupdated_at differs from created_at if comment was editedCreate a new pull request in a GitHub repository.
Arguments:
owner (string): Repository owner (user or organization)repo (string): Repository nametitle (string): Pull request titlebody (string, optional): Pull request description (Markdown supported)head (string): Name of the branch where changes are implemented (head branch)base (string): Name of the branch to merge into (base branch)draft (boolean, optional): Create as draft PR (default: false)maintainer_can_modify (boolean, optional): Allow maintainer edits (default: true)Example:
{
"owner": "octocat",
"repo": "hello-world",
"title": "Add new feature",
"body": "This PR adds...\n\nCloses #123",
"head": "feature-branch",
"base": "main",
"draft": false
}
Cross-fork PRs:
For PRs from a fork, use format: fork-owner:branch-name for head:
{
"owner": "upstream-owner",
"repo": "project",
"title": "Fix authentication bug",
"head": "fork-owner:fix-auth-bug",
"base": "main"
}
Requirements:
Update an existing pull request.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepr_number (number): Pull request numbertitle (string, optional): New titlebody (string, optional): New descriptionstate (string, optional): "open" or "closed"base (string, optional): New base branchmaintainer_can_modify (boolean, optional): Allow maintainer editsExample:
{
"owner": "octocat",
"repo": "hello-world",
"pr_number": 42,
"title": "Updated: Add new feature",
"state": "open"
}
Important notes:
Merge a pull request in a GitHub repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepr_number (number): Pull request numbercommit_title (string, optional): Merge commit titlecommit_message (string, optional): Merge commit messagemerge_method (string, optional): "merge", "squash", or "rebase"sha (string, optional): SHA of PR head for safety checkExample:
{
"owner": "octocat",
"repo": "hello-world",
"pr_number": 42,
"merge_method": "squash",
"commit_title": "Add authentication feature"
}
Merge methods:
merge: Creates merge commit, preserves all commitssquash: Combines all commits into onerebase: Rebases commits onto base branchSafety:
Use sha parameter to ensure PR hasn't changed:
{
"pr_number": 42,
"sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e"
}
Requirements:
Warning: This is a destructive operation that modifies the base branch.
Get detailed status information about a pull request.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepr_number (number): Pull request numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"pr_number": 42
}
Returns comprehensive status:
Use cases:
Important fields:
mergeable: true/false/null (null = still calculating)mergeable_state: "clean", "dirty", "blocked", "unstable"draft: true if still in draft modemerged: true if already mergedGet all files changed in a pull request with diff stats.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepr_number (number): Pull request numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"pr_number": 42
}
Returns for each file:
filename: Path to the filestatus: "added", "modified", "removed", "renamed", "copied"additions: Lines addeddeletions: Lines deletedchanges: Total changes (additions + deletions)patch: Actual diff contentblob_url: URL to view fileraw_url: URL to download raw fileprevious_filename: Original name (for renamed files)Response format:
{
"files": [
{
"filename": "src/main.rs",
"status": "modified",
"additions": 15,
"deletions": 3,
"changes": 18,
"patch": "@@ -10,7 +10,19 @@..."
}
],
"count": 5
}
Use cases:
Get all reviews for a pull request.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepull_number (number): PR numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42
}
Returns: Array of reviews with:
id: Review IDuser: Reviewer username and profilebody: Review comment textstate: "APPROVED", "CHANGES_REQUESTED", "COMMENTED", "DISMISSED", "PENDING"submitted_at: When review was submittedcommit_id: SHA the review is associated withUse cases:
Create a review on a pull request (approve, request changes, or comment).
Arguments:
owner (string): Repository ownerrepo (string): Repository namepull_number (number): PR numberevent (string): "APPROVE", "REQUEST_CHANGES", or "COMMENT"body (string, optional): Review commentcommit_id (string, optional): Specific commit to reviewExample (approve):
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42,
"event": "APPROVE",
"body": "Looks good to me!"
}
Example (request changes):
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42,
"event": "REQUEST_CHANGES",
"body": "Please address the comments before merging."
}
Event types:
APPROVE: Approve the PR (allows merging if required reviews are met)REQUEST_CHANGES: Block PR until changes are madeCOMMENT: Leave review comments without approval/blockingNote: This creates a REVIEW, not individual line comments. Use add_pull_request_review_comment for inline comments.
Add an inline review comment to a PR (comment on specific lines of code).
Arguments:
owner (string): Repository ownerrepo (string): Repository namepull_number (number): PR numberbody (string): Comment textcommit_id (string, optional): Commit SHApath (string, optional): File pathline (number, optional): Line number in diffside (string, optional): "LEFT" or "RIGHT"start_line (number, optional): For multi-line commentsstart_side (string, optional): Side of start linesubject_type (string, optional): Subject typein_reply_to (number, optional): Comment ID to reply toExample (inline comment):
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42,
"body": "Consider using const here",
"commit_id": "abc123",
"path": "src/main.rs",
"line": 45,
"side": "RIGHT"
}
Example (multi-line comment):
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42,
"body": "This entire function could be simplified",
"commit_id": "abc123",
"path": "src/utils.rs",
"start_line": 20,
"line": 25,
"side": "RIGHT"
}
Example (reply to comment):
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42,
"body": "Good point, will fix",
"in_reply_to": 123456789
}
Comment types:
Tips:
Request GitHub Copilot to review a pull request (experimental).
Arguments:
owner (string): Repository ownerrepo (string): Repository namepull_number (number): PR numberExample:
{
"owner": "octocat",
"repo": "hello-world",
"pull_number": 42
}
What Copilot reviews:
Important notes:
Example workflow:
request_copilot_review({...})get_pull_request_reviews({...})Create a new repository under the authenticated user's account.
Arguments:
name (string): Repository namedescription (string, optional): Repository descriptionprivate (boolean, optional): Make privateauto_init (boolean, optional): Initialize with READMEExample:
{
"name": "my-project",
"description": "My awesome project",
"private": false,
"auto_init": true
}
Fork a repository.
Arguments:
owner (string): Repository owner to fork fromrepo (string): Repository nameorganization (string, optional): Fork to organizationExample:
{
"owner": "octocat",
"repo": "hello-world"
}
List branches in a repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository namepage (number, optional): Page numberper_page (number, optional): Results per pageExample:
{
"owner": "octocat",
"repo": "hello-world",
"per_page": 50
}
Create a new branch from a commit SHA.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebranch_name (string): New branch namesha (string): Commit SHA to branch fromExample:
{
"owner": "octocat",
"repo": "hello-world",
"branch_name": "feature/new-feature",
"sha": "abc123def456"
}
List commits in a repository with filtering options.
Arguments:
owner (string): Repository ownerrepo (string): Repository namesha (string, optional): Branch or SHA to start frompath (string, optional): Only commits affecting this pathauthor (string, optional): Filter by authorsince (string, optional): Only after this date (ISO 8601)until (string, optional): Only before this date (ISO 8601)page (number, optional): Page numberper_page (number, optional): Results per pageExample:
{
"owner": "octocat",
"repo": "hello-world",
"sha": "main",
"author": "octocat",
"since": "2024-01-01T00:00:00Z",
"per_page": 25
}
Get detailed information about a specific commit.
Arguments:
owner (string): Repository ownerrepo (string): Repository namecommit_sha (string): Commit SHApage (number, optional): Page for files listper_page (number, optional): Results per pageExample:
{
"owner": "octocat",
"repo": "hello-world",
"commit_sha": "abc123def456"
}
Search code across GitHub repositories.
Arguments:
query (string): Search query (GitHub code search syntax)sort (string, optional): Sort by "indexed"order (string, optional): "asc" or "desc"page (number, optional): Page numberper_page (number, optional): Results per pageQuery Syntax:
repo:owner/repo - Search in repositorylanguage:rust - Filter by languagepath:src/ - Search in pathextension:rs - Filter by extensionExample:
{
"query": "repo:octocat/hello-world async fn language:rust",
"per_page": 20
}
Search GitHub repositories.
Arguments:
query (string): Search query (GitHub repository search syntax)sort (string, optional): "stars", "forks", or "updated"order (string, optional): "asc" or "desc"page (number, optional): Page numberper_page (number, optional): Results per pageQuery Syntax:
language:rust - Filter by languagestars:>1000 - Star count filterforks:>100 - Fork count filtertopic:async - Filter by topicuser:octocat - By userorg:github - By organizationExample:
{
"query": "language:rust stars:>100 topic:async",
"sort": "stars",
"order": "desc",
"per_page": 10
}
Search GitHub users.
Arguments:
query (string): Search querysort (string, optional): "followers", "repositories", or "joined"order (string, optional): "asc" or "desc"page (number, optional): Page numberper_page (number, optional): Results per pageExample:
{
"query": "location:\"San Francisco\" language:rust",
"sort": "followers",
"order": "desc"
}
All tools require:
GITHUB_TOKEN: Personal access token or app tokenToken scopes:
public_repo scoperepo scopeuse kodegen_github::GitHubClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = GitHubClient::with_token("ghp_...")?;
let issue = client.get_issue("octocat", "hello-world", 42).await?;
println!("Issue: {:?}", issue);
Ok(())
}
These tools are automatically available when the github feature is enabled in the kodegen server:
# Enable GitHub tools
kodegen --tool github
# List available categories
kodegen --list-categories
MIT