github/github-mcp-server · error
missing required parameter: %s
Error message
missing required parameter: %s
What it means
Thrown by RequiredParam in pkg/github/params.go when a required argument is entirely absent from the tool request. This is the first of three checks in the generic required-parameter extractor: presence, type, non-zero. Most string-typed required params (owner, repo, title, query, ...) go through it.
Source
Thrown at pkg/github/params.go:133
result := int64(f)
// Check round-trip to detect precision loss for large int64 values
if float64(result) != f {
return 0, fmt.Errorf("numeric value %v is too large to fit in int64", f)
}
return result, nil
}
// RequiredParam is a helper function that can be used to fetch a requested parameter from the request.
// It does the following checks:
// 1. Checks if the parameter is present in the request.
// 2. Checks if the parameter is of the expected type.
// 3. Checks if the parameter is not empty, i.e: non-zero value
func RequiredParam[T comparable](args map[string]any, p string) (T, error) {
var zero T
// Check if the parameter is present in the request
if _, ok := args[p]; !ok {
return zero, fmt.Errorf("missing required parameter: %s", p)
}
// Check if the parameter is of the expected type
val, ok := args[p].(T)
if !ok {
return zero, fmt.Errorf("parameter %s is not of type %T", p, zero)
}
if val == zero {
return zero, fmt.Errorf("missing required parameter: %s", p)
}
return val, nil
}
// RequiredInt is a helper function that can be used to fetch a requested parameter from the request.
// It does the following checks:
// 1. Checks if the parameter is present in the request.View on GitHub (pinned to 0ea1f775a7)
Solutions
- Add the missing argument with the exact key name from the tool's inputSchema.
- Check parameter casing/snake_case — the error text names the exact key the server looked for.
- If the call previously worked, diff the server version's tool schemas; a new required field may have been introduced.
- Validate arguments against inputSchema client-side before dispatch.
Example fix
// before
arguments = { owner, repo, body: "text" } // create_issue missing title
// after
arguments = { owner, repo, title: "Bug report", body: "text" } Defensive patterns
Strategy: validation
Validate before calling
function requireArgs(args, schema) {
for (const [name, prop] of Object.entries(schema.properties || {})) {
if (schema.required?.includes(name) && (args[name] === undefined)) {
throw new Error(`missing required parameter: ${name}`);
}
}
} Type guard
function hasAllRequired(args: object, required: string[]): args is Record<string, unknown> {
return required.every((k) => args[k] !== undefined);
} Try / catch
On 'missing required parameter: X', read the exact key name from the message, add it with a valid value, and retry; the rest of the payload was accepted structurally.
Prevention
- Validate against the tool's inputSchema (from tools/list) before dispatch.
- Build arguments from typed interfaces so missing keys fail at compile time in TS.
- Watch for snake_case/camelCase mismatches between your code and the schema.
When it happens
Trigger: Calling create_issue without title; get_pull_request without pull_number; any tool call where the arguments object is missing a key marked required in the schema.
Common situations: LLM omitting fields it considers optional; client code with typos in key names (PullNumber vs pull_number); schema drift after server upgrade adding a new required param; empty arguments object sent by mistake.
Related errors
- invalid detail %q: must be one of "none", "stats", "full_pat
- parameter %s is not of type %T, is %T
- parameter %s is not of type string or null, is %T
- parameter %s must not be empty
- invalid numeric value: %s
AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15).
Data as JSON: /api/errors/e642909e2411aaa8.
Report an issue: GitHub.