rohitg00/ai-engineering-from-scratch · error · ProtocolViolation
completion.values must be an array of strings
Error message
completion.values must be an array of strings
What it means
Error "completion.values must be an array of strings" thrown in rohitg00/ai-engineering-from-scratch.
Source
Thrown at phases/13-tools-and-protocols/31-mcp-conformance-versioning-and-operations/code/main.py:290
if not isinstance(name, str) or not name:
raise ProtocolViolation("each tool descriptor requires a non-empty name")
if name in names:
raise ProtocolViolation("tools/list contains a duplicate tool name")
names.add(name)
if not isinstance(description, str) or not description:
raise ProtocolViolation("each tool descriptor requires a non-empty description")
if not isinstance(input_schema, dict) or input_schema.get("type") != "object":
raise ProtocolViolation("each tool descriptor requires an object-root inputSchema")
if method == "completion/complete":
if result_type != "complete":
raise ProtocolViolation("completion/complete must return a complete result")
completion = result.get("completion")
if not isinstance(completion, dict):
raise ProtocolViolation("completion/complete requires a completion object")
values = completion.get("values")
if not isinstance(values, list) or any(not isinstance(value, str) for value in values):
raise ProtocolViolation("completion.values must be an array of strings")
if len(values) > 100:
raise ProtocolViolation("completion.values must contain at most 100 entries")
total = completion.get("total")
if total is not None and (
isinstance(total, bool) or not isinstance(total, int) or total < len(values)
):
raise ProtocolViolation("completion.total must be an integer at least values length")
has_more = completion.get("hasMore")
if has_more is not None and not isinstance(has_more, bool):
raise ProtocolViolation("completion.hasMore must be a boolean")
if result_type != "task":
return
if method != "tools/call":
raise ProtocolViolation("task result is valid only for tools/call")
required_strings = ("taskId", "status", "createdAt", "lastUpdatedAt")
for field in required_strings:
if not isinstance(result.get(field), str) or not result[field]:View on GitHub (pinned to 39ea8a1c6d)
When it happens
Trigger: Thrown at phases/13-tools-and-protocols/31-mcp-conformance-versioning-and-operations/code/main.py:290 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26).
Data as JSON: /api/errors/2f09c3275a4b69d6.
Report an issue: GitHub.