Summary
Both iteration-creation tools fail against the live GitHub GraphQL API. The underlying updateProjectV2Field mutation works fine when called directly — the server appears to be sending the iteration list under a wrong/nonexistent input-type name.
Repro
Called create_iteration_field against a fresh ProjectsV2:
{
"projectId": "PVT_kwHOAwJiCM4BUd_L",
"fieldName": "Sprint",
"duration": 1,
"startDate": "2026-04-13",
"iterations": [
{ "title": "M1 — Foundations", "startDate": "2026-04-13", "duration": 1 },
{ "title": "M2 — Learned SR backbone", "startDate": "2026-04-14", "duration": 1 },
{ "title": "M3 — Production features", "startDate": "2026-04-15", "duration": 1 },
{ "title": "M4 — Polish & v0.1.0", "startDate": "2026-04-16", "duration": 1 }
]
}
Error
ProjectV2IterationFieldConfigurationIterationInput isn't a defined input type (on $iterations)
Side effect: the iteration field itself was still created (empty). A follow-up create_iteration_field with the same fieldName then fails with Name has already been taken.
Calling add_iteration on the empty field also fails:
Field 'startDate' doesn't exist on type 'ProjectV2IterationFieldConfiguration'
What works
Direct GraphQL via gh api graphql succeeds with this shape:
mutation {
updateProjectV2Field(input: {
fieldId: "PVTIF_…",
iterationConfiguration: {
startDate: "2026-04-13",
duration: 1,
iterations: [
{ title: "M1 — Foundations", startDate: "2026-04-13", duration: 1 },
{ title: "M2 — Learned SR backbone", startDate: "2026-04-14", duration: 1 }
]
}
}) {
projectV2Field {
... on ProjectV2IterationField {
id
configuration { iterations { id title startDate duration } }
}
}
}
}
Returns ProjectV2IterationField with populated configuration.iterations (ids, titles, dates).
Schema notes
Introspection confirms:
UpdateProjectV2FieldInput.iterationConfiguration → ProjectV2IterationFieldConfigurationInput (non-deprecated, public).
ProjectV2IterationFieldConfigurationInput has three non-null fields: startDate: Date!, duration: Int!, iterations: [<unknown>]!.
- The list element type is not publicly named — searching the schema for any
*Iteration*Input returns nothing. In practice GitHub accepts literal objects with { title, startDate, duration } keys.
So the root cause looks like the server is typing iterations against a named input type (ProjectV2IterationFieldConfigurationIterationInput) that doesn't exist in the public schema. Passing the list as an unnamed [JSON!]! / inline-object list (as the working mutation above does) should fix both tools.
Suggested fix
- In
create_iteration_field and add_iteration, stop referencing ProjectV2IterationFieldConfigurationIterationInput in the GraphQL variable declarations — inline the iterations list or type it as [ProjectV2IterationFieldConfigurationIterationInput!]! only if/when GitHub exposes it.
add_iteration additionally references startDate on the output type ProjectV2IterationFieldConfiguration, which doesn't exist there — that field lives on the individual iterations nodes. Adjust the selection set accordingly.
- On
create_iteration_field failure, consider rolling back the partially-created field so retries with the same name don't 409.
Environment
- Tool version: whatever is currently deployed on the MCP server as of 2026-04-13
- Client: Claude Code via MCP
- Target: public github.com GraphQL API
Happy to PR if helpful.
Summary
Both iteration-creation tools fail against the live GitHub GraphQL API. The underlying
updateProjectV2Fieldmutation works fine when called directly — the server appears to be sending the iteration list under a wrong/nonexistent input-type name.Repro
Called
create_iteration_fieldagainst a fresh ProjectsV2:{ "projectId": "PVT_kwHOAwJiCM4BUd_L", "fieldName": "Sprint", "duration": 1, "startDate": "2026-04-13", "iterations": [ { "title": "M1 — Foundations", "startDate": "2026-04-13", "duration": 1 }, { "title": "M2 — Learned SR backbone", "startDate": "2026-04-14", "duration": 1 }, { "title": "M3 — Production features", "startDate": "2026-04-15", "duration": 1 }, { "title": "M4 — Polish & v0.1.0", "startDate": "2026-04-16", "duration": 1 } ] }Error
Side effect: the iteration field itself was still created (empty). A follow-up
create_iteration_fieldwith the samefieldNamethen fails withName has already been taken.Calling
add_iterationon the empty field also fails:What works
Direct GraphQL via
gh api graphqlsucceeds with this shape:Returns
ProjectV2IterationFieldwith populatedconfiguration.iterations(ids, titles, dates).Schema notes
Introspection confirms:
UpdateProjectV2FieldInput.iterationConfiguration→ProjectV2IterationFieldConfigurationInput(non-deprecated, public).ProjectV2IterationFieldConfigurationInputhas three non-null fields:startDate: Date!,duration: Int!,iterations: [<unknown>]!.*Iteration*Inputreturns nothing. In practice GitHub accepts literal objects with{ title, startDate, duration }keys.So the root cause looks like the server is typing
iterationsagainst a named input type (ProjectV2IterationFieldConfigurationIterationInput) that doesn't exist in the public schema. Passing the list as an unnamed[JSON!]!/ inline-object list (as the working mutation above does) should fix both tools.Suggested fix
create_iteration_fieldandadd_iteration, stop referencingProjectV2IterationFieldConfigurationIterationInputin the GraphQL variable declarations — inline the iterations list or type it as[ProjectV2IterationFieldConfigurationIterationInput!]!only if/when GitHub exposes it.add_iterationadditionally referencesstartDateon the output typeProjectV2IterationFieldConfiguration, which doesn't exist there — that field lives on the individualiterationsnodes. Adjust the selection set accordingly.create_iteration_fieldfailure, consider rolling back the partially-created field so retries with the same name don't 409.Environment
Happy to PR if helpful.