feat: add 13 read tools (PR files/commits, comments, branches, releases, milestones, org/status/languages/topics)
test / test (push) Successful in 1m13s
lint / lint (push) Successful in 1m14s
docker / docker-publish (pull_request) Has been skipped
docker / test (pull_request) Successful in 22s
docker / lint (pull_request) Successful in 29s
lint / lint (pull_request) Successful in 31s
test / test (pull_request) Successful in 21s
docker / docker-test (pull_request) Successful in 23s
test / test (push) Successful in 1m13s
lint / lint (push) Successful in 1m14s
docker / docker-publish (pull_request) Has been skipped
docker / test (pull_request) Successful in 22s
docker / lint (pull_request) Successful in 29s
lint / lint (pull_request) Successful in 31s
test / test (pull_request) Successful in 21s
docker / docker-test (pull_request) Successful in 23s
Expands the read surface so the MCP can inspect more of Gitea: - list_pull_request_files, list_pull_request_commits, list_issue_comments - list_branches, get_branch - get_release, get_latest_release, list_milestones - get_commit_status - list_org_repositories, list_organizations - get_repo_languages, list_repo_topics Each: arg schema (extra=forbid; GitRef on branch/sha fields), Gitea client method with url-encoded path segments, bounded handler, MCP registration (read-only), server wiring, docs, and parametrized success tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -317,6 +317,90 @@ class EditIssueCommentArgs(RepositoryArgs):
|
||||
body: str = Field(..., min_length=1, max_length=10_000)
|
||||
|
||||
|
||||
class ListPullRequestFilesArgs(RepositoryArgs):
|
||||
"""Arguments for list_pull_request_files."""
|
||||
|
||||
pull_number: int = Field(..., ge=1)
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class ListPullRequestCommitsArgs(RepositoryArgs):
|
||||
"""Arguments for list_pull_request_commits."""
|
||||
|
||||
pull_number: int = Field(..., ge=1)
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class ListIssueCommentsArgs(RepositoryArgs):
|
||||
"""Arguments for list_issue_comments."""
|
||||
|
||||
issue_number: int = Field(..., ge=1)
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class ListBranchesArgs(RepositoryArgs):
|
||||
"""Arguments for list_branches."""
|
||||
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class GetBranchArgs(RepositoryArgs):
|
||||
"""Arguments for get_branch."""
|
||||
|
||||
branch: GitRef = Field(..., min_length=1, max_length=200)
|
||||
|
||||
|
||||
class GetReleaseArgs(RepositoryArgs):
|
||||
"""Arguments for get_release."""
|
||||
|
||||
release_id: int = Field(..., ge=1)
|
||||
|
||||
|
||||
class LatestReleaseArgs(RepositoryArgs):
|
||||
"""Arguments for get_latest_release."""
|
||||
|
||||
|
||||
class ListMilestonesArgs(RepositoryArgs):
|
||||
"""Arguments for list_milestones."""
|
||||
|
||||
state: Literal["open", "closed", "all"] = Field(default="open")
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class CommitStatusArgs(RepositoryArgs):
|
||||
"""Arguments for get_commit_status."""
|
||||
|
||||
sha: GitRef = Field(..., min_length=1, max_length=64)
|
||||
|
||||
|
||||
class ListOrgRepositoriesArgs(StrictBaseModel):
|
||||
"""Arguments for list_org_repositories."""
|
||||
|
||||
org: str = Field(..., pattern=_REPO_PART_PATTERN)
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class ListOrganizationsArgs(StrictBaseModel):
|
||||
"""Arguments for list_organizations."""
|
||||
|
||||
page: int = Field(default=1, ge=1, le=10_000)
|
||||
limit: int = Field(default=50, ge=1, le=100)
|
||||
|
||||
|
||||
class RepoLanguagesArgs(RepositoryArgs):
|
||||
"""Arguments for get_repo_languages."""
|
||||
|
||||
|
||||
class RepoTopicsArgs(RepositoryArgs):
|
||||
"""Arguments for list_repo_topics."""
|
||||
|
||||
|
||||
def extract_repository(arguments: dict[str, object]) -> str | None:
|
||||
"""Extract `owner/repo` from raw argument mapping.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user