fix(gitea-mcp): accept string or integer for numeric params

MCP library validates schema BEFORE call_tool handler runs, so
our _coerce_types function never gets a chance to convert strings.

Changed all integer fields to accept both types:
- issue_number, milestone_id, pr_number, depends_on, milestone, limit, position

This fixes: "Input validation error: '312' is not of type 'integer'"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-28 22:17:19 -05:00
parent 5aaab4cb9a
commit b492a13702

View File

@@ -144,7 +144,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue number" "description": "Issue number"
}, },
"repo": { "repo": {
@@ -189,7 +189,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue number" "description": "Issue number"
}, },
"title": { "title": {
@@ -211,7 +211,7 @@ class GiteaMCPServer:
"description": "New labels" "description": "New labels"
}, },
"milestone": { "milestone": {
"type": "integer", "type": ["integer", "string"],
"description": "Milestone ID to assign" "description": "Milestone ID to assign"
}, },
"repo": { "repo": {
@@ -229,7 +229,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue number" "description": "Issue number"
}, },
"comment": { "comment": {
@@ -424,7 +424,7 @@ class GiteaMCPServer:
"description": "Tags to filter by (optional)" "description": "Tags to filter by (optional)"
}, },
"limit": { "limit": {
"type": "integer", "type": ["integer", "string"],
"default": 20, "default": 20,
"description": "Maximum results" "description": "Maximum results"
}, },
@@ -462,7 +462,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"milestone_id": { "milestone_id": {
"type": "integer", "type": ["integer", "string"],
"description": "Milestone ID" "description": "Milestone ID"
}, },
"repo": { "repo": {
@@ -506,7 +506,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"milestone_id": { "milestone_id": {
"type": "integer", "type": ["integer", "string"],
"description": "Milestone ID" "description": "Milestone ID"
}, },
"title": { "title": {
@@ -541,7 +541,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"milestone_id": { "milestone_id": {
"type": "integer", "type": ["integer", "string"],
"description": "Milestone ID" "description": "Milestone ID"
}, },
"repo": { "repo": {
@@ -560,7 +560,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue number" "description": "Issue number"
}, },
"repo": { "repo": {
@@ -578,11 +578,11 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue that will depend on another" "description": "Issue that will depend on another"
}, },
"depends_on": { "depends_on": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue that blocks issue_number" "description": "Issue that blocks issue_number"
}, },
"repo": { "repo": {
@@ -600,11 +600,11 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"issue_number": { "issue_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue that depends on another" "description": "Issue that depends on another"
}, },
"depends_on": { "depends_on": {
"type": "integer", "type": ["integer", "string"],
"description": "Issue being depended on" "description": "Issue being depended on"
}, },
"repo": { "repo": {
@@ -782,7 +782,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"pr_number": { "pr_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Pull request number" "description": "Pull request number"
}, },
"repo": { "repo": {
@@ -800,7 +800,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"pr_number": { "pr_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Pull request number" "description": "Pull request number"
}, },
"repo": { "repo": {
@@ -818,7 +818,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"pr_number": { "pr_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Pull request number" "description": "Pull request number"
}, },
"repo": { "repo": {
@@ -836,7 +836,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"pr_number": { "pr_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Pull request number" "description": "Pull request number"
}, },
"body": { "body": {
@@ -855,7 +855,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"path": {"type": "string"}, "path": {"type": "string"},
"position": {"type": "integer"}, "position": {"type": ["integer", "string"]},
"body": {"type": "string"} "body": {"type": "string"}
} }
}, },
@@ -876,7 +876,7 @@ class GiteaMCPServer:
"type": "object", "type": "object",
"properties": { "properties": {
"pr_number": { "pr_number": {
"type": "integer", "type": ["integer", "string"],
"description": "Pull request number" "description": "Pull request number"
}, },
"body": { "body": {