Teams are the access-control mechanism inside organizations. Currently the MCP server
can only list teams. Full team management means creating teams, adding/removing members
and repositories, enabling fine-grained permissions across an organization.
Endpoints to implement
Method
Path
Tool name
Description
GET
/teams/{id}
get_team
Get team details
PATCH
/teams/{id}
update_team
Update team name/permission
DELETE
/teams/{id}
delete_team
Delete a team
GET
/teams/{id}/members
list_team_members
List team members
PUT
/teams/{id}/members/{username}
add_team_member
Add member to team
DELETE
/teams/{id}/members/{username}
remove_team_member
Remove member from team
GET
/teams/{id}/repos
list_team_repos
List repos accessible to team
PUT
/teams/{id}/repos/{org}/{repo}
add_team_repo
Add repo to team
DELETE
/teams/{id}/repos/{org}/{repo}
remove_team_repo
Remove repo from team
GET
/orgs/{org}/teams/search
search_org_teams
Search teams in org
Acceptance Criteria
get_team(id) returns team object with name, permission, units, members_count, repos_count
update_team(id, name, permission, description, units) via PATCH
delete_team(id) returns {"success": true} on 204
add_team_member / remove_team_member return {"success": true} on 204
add_team_repo / remove_team_repo return {"success": true} on 204
search_org_teams(org, query, limit) returns matching teams
PUT /teams/{id}/members/{username} and PUT /teams/{id}/repos/{org}/{repo} have no request body
Team units controls which repo sections the team can access: repo.code, repo.issues, repo.pulls, repo.releases, repo.wiki, repo.projects, repo.packages
id is an integer (team ID), not a name
## Context
Teams are the access-control mechanism inside organizations. Currently the MCP server
can only list teams. Full team management means creating teams, adding/removing members
and repositories, enabling fine-grained permissions across an organization.
## Endpoints to implement
| Method | Path | Tool name | Description |
|--------|------|-----------|-------------|
| GET | `/teams/{id}` | `get_team` | Get team details |
| PATCH | `/teams/{id}` | `update_team` | Update team name/permission |
| DELETE | `/teams/{id}` | `delete_team` | Delete a team |
| GET | `/teams/{id}/members` | `list_team_members` | List team members |
| PUT | `/teams/{id}/members/{username}` | `add_team_member` | Add member to team |
| DELETE | `/teams/{id}/members/{username}` | `remove_team_member` | Remove member from team |
| GET | `/teams/{id}/repos` | `list_team_repos` | List repos accessible to team |
| PUT | `/teams/{id}/repos/{org}/{repo}` | `add_team_repo` | Add repo to team |
| DELETE | `/teams/{id}/repos/{org}/{repo}` | `remove_team_repo` | Remove repo from team |
| GET | `/orgs/{org}/teams/search` | `search_org_teams` | Search teams in org |
## Acceptance Criteria
- [ ] `get_team(id)` returns team object with `name`, `permission`, `units`, `members_count`, `repos_count`
- [ ] `update_team(id, name, permission, description, units)` via PATCH
- [ ] `delete_team(id)` returns `{"success": true}` on 204
- [ ] `add_team_member` / `remove_team_member` return `{"success": true}` on 204
- [ ] `add_team_repo` / `remove_team_repo` return `{"success": true}` on 204
- [ ] `search_org_teams(org, query, limit)` returns matching teams
## Technical Notes
- `PATCH /teams/{id}` body: `{"name": "...", "description": "...", "permission": "write", "units": ["repo.code", "repo.issues"]}`
- `PUT /teams/{id}/members/{username}` and `PUT /teams/{id}/repos/{org}/{repo}` have no request body
- Team `units` controls which repo sections the team can access: `repo.code`, `repo.issues`, `repo.pulls`, `repo.releases`, `repo.wiki`, `repo.projects`, `repo.packages`
- `id` is an integer (team ID), not a name
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
Teams are the access-control mechanism inside organizations. Currently the MCP server
can only list teams. Full team management means creating teams, adding/removing members
and repositories, enabling fine-grained permissions across an organization.
Endpoints to implement
/teams/{id}get_team/teams/{id}update_team/teams/{id}delete_team/teams/{id}/memberslist_team_members/teams/{id}/members/{username}add_team_member/teams/{id}/members/{username}remove_team_member/teams/{id}/reposlist_team_repos/teams/{id}/repos/{org}/{repo}add_team_repo/teams/{id}/repos/{org}/{repo}remove_team_repo/orgs/{org}/teams/searchsearch_org_teamsAcceptance Criteria
get_team(id)returns team object withname,permission,units,members_count,repos_countupdate_team(id, name, permission, description, units)via PATCHdelete_team(id)returns{"success": true}on 204add_team_member/remove_team_memberreturn{"success": true}on 204add_team_repo/remove_team_reporeturn{"success": true}on 204search_org_teams(org, query, limit)returns matching teamsTechnical Notes
PATCH /teams/{id}body:{"name": "...", "description": "...", "permission": "write", "units": ["repo.code", "repo.issues"]}PUT /teams/{id}/members/{username}andPUT /teams/{id}/repos/{org}/{repo}have no request bodyunitscontrols which repo sections the team can access:repo.code,repo.issues,repo.pulls,repo.releases,repo.wiki,repo.projects,repo.packagesidis an integer (team ID), not a name