Skip to content

Commit 468d58c

Browse files
authored
Merge branch 'main' into issue-461
2 parents 60868ef + 23fa0dd commit 468d58c

19 files changed

Lines changed: 1718 additions & 53 deletions

.github/workflows/docker-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ jobs:
6060
# https://github.com/docker/login-action
6161
- name: Log into registry ${{ env.REGISTRY }}
6262
if: github.event_name != 'pull_request'
63-
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
63+
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
6464
with:
6565
registry: ${{ env.REGISTRY }}
6666
username: ${{ github.actor }}

.github/workflows/registry-releaser.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ jobs:
1717
uses: actions/checkout@v5
1818

1919
- name: Setup Go
20-
uses: actions/setup-go@v5
20+
uses: actions/setup-go@v6
2121
with:
2222
go-version: "stable"
2323

2424
- name: Fetch tags
25-
run: git fetch --tags
25+
run: |
26+
if [[ "${{ github.ref_type }}" != "tag" ]]; then
27+
git fetch --tags
28+
else
29+
echo "Skipping tag fetch - already on tag ${{ github.ref_name }}"
30+
fi
2631
2732
- name: Install MCP Publisher
2833
run: |
@@ -47,6 +52,11 @@ jobs:
4752
run: |
4853
python3 -m json.tool server.json > /dev/null && echo "Configuration valid" || exit 1
4954
55+
- name: Display final server.json
56+
run: |
57+
echo "Final server.json contents:"
58+
cat server.json
59+
5060
- name: Login to MCP Registry (OIDC)
5161
run: ./mcp-publisher login github-oidc
5262

README.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,16 +658,48 @@ The following sets of tools are available (all are on by default):
658658

659659
<summary>Projects</summary>
660660

661+
- **add_project_item** - Add project item
662+
- `item_id`: The numeric ID of the issue or pull request to add to the project. (number, required)
663+
- `item_type`: The item's type, either issue or pull_request. (string, required)
664+
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
665+
- `owner_type`: Owner type (string, required)
666+
- `project_number`: The project's number. (number, required)
667+
668+
- **delete_project_item** - Delete project item
669+
- `item_id`: The internal project item ID to delete from the project (not the issue or pull request ID). (number, required)
670+
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
671+
- `owner_type`: Owner type (string, required)
672+
- `project_number`: The project's number. (number, required)
673+
661674
- **get_project** - Get project
662675
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
663676
- `owner_type`: Owner type (string, required)
664677
- `project_number`: The project's number (number, required)
665678

679+
- **get_project_field** - Get project field
680+
- `field_id`: The field's id. (number, required)
681+
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
682+
- `owner_type`: Owner type (string, required)
683+
- `project_number`: The project's number. (number, required)
684+
685+
- **get_project_item** - Get project item
686+
- `item_id`: The item's ID. (number, required)
687+
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
688+
- `owner_type`: Owner type (string, required)
689+
- `project_number`: The project's number. (number, required)
690+
666691
- **list_project_fields** - List project fields
667692
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
668693
- `owner_type`: Owner type (string, required)
669694
- `per_page`: Number of results per page (max 100, default: 30) (number, optional)
670-
- `projectNumber`: The project's number. (string, required)
695+
- `project_number`: The project's number. (number, required)
696+
697+
- **list_project_items** - List project items
698+
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
699+
- `owner_type`: Owner type (string, required)
700+
- `per_page`: Number of results per page (max 100, default: 30) (number, optional)
701+
- `project_number`: The project's number. (number, required)
702+
- `query`: Search query to filter items (string, optional)
671703

672704
- **list_projects** - List projects
673705
- `owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ require (
3131
github.com/fsnotify/fsnotify v1.8.0 // indirect
3232
github.com/go-viper/mapstructure/v2 v2.4.0
3333
github.com/google/go-github/v71 v71.0.0 // indirect
34-
github.com/google/go-querystring v1.1.0 // indirect
34+
github.com/google/go-querystring v1.1.0
3535
github.com/google/uuid v1.6.0 // indirect
3636
github.com/gorilla/mux v1.8.0 // indirect
3737
github.com/inconshreveable/mousetrap v1.1.0 // indirect

internal/ghmcp/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ func NewMCPServer(cfg MCPServerConfig) (*server.MCPServer, error) {
118118

119119
// Generate instructions based on enabled toolsets
120120
instructions := github.GenerateInstructions(enabledToolsets)
121-
122-
ghServer := github.NewServer(cfg.Version,
121+
122+
ghServer := github.NewServer(cfg.Version,
123123
server.WithInstructions(instructions),
124124
server.WithHooks(hooks),
125125
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"annotations": {
3+
"title": "Add project item",
4+
"readOnlyHint": false
5+
},
6+
"description": "Add a specific Project item for a user or org",
7+
"inputSchema": {
8+
"properties": {
9+
"item_id": {
10+
"description": "The numeric ID of the issue or pull request to add to the project.",
11+
"type": "number"
12+
},
13+
"item_type": {
14+
"description": "The item's type, either issue or pull_request.",
15+
"enum": [
16+
"issue",
17+
"pull_request"
18+
],
19+
"type": "string"
20+
},
21+
"owner": {
22+
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
23+
"type": "string"
24+
},
25+
"owner_type": {
26+
"description": "Owner type",
27+
"enum": [
28+
"user",
29+
"org"
30+
],
31+
"type": "string"
32+
},
33+
"project_number": {
34+
"description": "The project's number.",
35+
"type": "number"
36+
}
37+
},
38+
"required": [
39+
"owner_type",
40+
"owner",
41+
"project_number",
42+
"item_type",
43+
"item_id"
44+
],
45+
"type": "object"
46+
},
47+
"name": "add_project_item"
48+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"annotations": {
3+
"title": "Delete project item",
4+
"readOnlyHint": false
5+
},
6+
"description": "Delete a specific Project item for a user or org",
7+
"inputSchema": {
8+
"properties": {
9+
"item_id": {
10+
"description": "The internal project item ID to delete from the project (not the issue or pull request ID).",
11+
"type": "number"
12+
},
13+
"owner": {
14+
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
15+
"type": "string"
16+
},
17+
"owner_type": {
18+
"description": "Owner type",
19+
"enum": [
20+
"user",
21+
"org"
22+
],
23+
"type": "string"
24+
},
25+
"project_number": {
26+
"description": "The project's number.",
27+
"type": "number"
28+
}
29+
},
30+
"required": [
31+
"owner_type",
32+
"owner",
33+
"project_number",
34+
"item_id"
35+
],
36+
"type": "object"
37+
},
38+
"name": "delete_project_item"
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"annotations": {
3+
"title": "Get project field",
4+
"readOnlyHint": true
5+
},
6+
"description": "Get Project field for a user or org",
7+
"inputSchema": {
8+
"properties": {
9+
"field_id": {
10+
"description": "The field's id.",
11+
"type": "number"
12+
},
13+
"owner": {
14+
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
15+
"type": "string"
16+
},
17+
"owner_type": {
18+
"description": "Owner type",
19+
"enum": [
20+
"user",
21+
"org"
22+
],
23+
"type": "string"
24+
},
25+
"project_number": {
26+
"description": "The project's number.",
27+
"type": "number"
28+
}
29+
},
30+
"required": [
31+
"owner_type",
32+
"owner",
33+
"project_number",
34+
"field_id"
35+
],
36+
"type": "object"
37+
},
38+
"name": "get_project_field"
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"annotations": {
3+
"title": "Get project item",
4+
"readOnlyHint": true
5+
},
6+
"description": "Get a specific Project item for a user or org",
7+
"inputSchema": {
8+
"properties": {
9+
"item_id": {
10+
"description": "The item's ID.",
11+
"type": "number"
12+
},
13+
"owner": {
14+
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
15+
"type": "string"
16+
},
17+
"owner_type": {
18+
"description": "Owner type",
19+
"enum": [
20+
"user",
21+
"org"
22+
],
23+
"type": "string"
24+
},
25+
"project_number": {
26+
"description": "The project's number.",
27+
"type": "number"
28+
}
29+
},
30+
"required": [
31+
"owner_type",
32+
"owner",
33+
"project_number",
34+
"item_id"
35+
],
36+
"type": "object"
37+
},
38+
"name": "get_project_item"
39+
}

pkg/github/__toolsnaps__/list_project_fields.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@
2222
"description": "Number of results per page (max 100, default: 30)",
2323
"type": "number"
2424
},
25-
"projectNumber": {
25+
"project_number": {
2626
"description": "The project's number.",
27-
"type": "string"
27+
"type": "number"
2828
}
2929
},
3030
"required": [
3131
"owner_type",
3232
"owner",
33-
"projectNumber"
33+
"project_number"
3434
],
3535
"type": "object"
3636
},

0 commit comments

Comments
 (0)