spring-projects/spring-ai · error · IllegalArgumentException
Either prompt or uri must be provided
Error message
Either prompt or uri must be provided
What it means
Builder-state validation in AbstractMcpCompleteMethodCallback.Builder.validate: a completion callback was registered with neither a prompt reference nor a URI, so there is no completion target to bind the annotated method to.
Solutions
- Set prompt(...) on the builder for prompt-completion methods
- Set uri(...) on the builder for resource-completion methods
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at mcp/mcp-annotations/src/main/java/org/springframework/ai/mcp/annotation/method/complete/AbstractMcpCompleteMethodCallback.java:491 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of spring-projects/spring-ai@98a7beda4f (2026-09-11).
Data as JSON: /api/errors/2641ece8cb6af091.
Report an issue: GitHub.
Appendix: source
Thrown at mcp/mcp-annotations/src/main/java/org/springframework/ai/mcp/annotation/method/complete/AbstractMcpCompleteMethodCallback.java:491
@SuppressWarnings("unchecked")
public T uriTemplateManagerFactory(McpUriTemplateManagerFactory uriTemplateManagerFactory) {
this.uriTemplateManagerFactory = uriTemplateManagerFactory;
return (T) this;
}
/**
* Validate the builder state.
* @throws IllegalArgumentException if the builder state is invalid
*/
protected void validate() {
if (this.method == null) {
throw new IllegalArgumentException("Method must not be null");
}
if (this.bean == null) {
throw new IllegalArgumentException("Bean must not be null");
}
if ((this.prompt == null || this.prompt.isEmpty()) && (this.uri == null || this.uri.isEmpty())) {
throw new IllegalArgumentException("Either prompt or uri must be provided");
}
if ((this.prompt != null && !this.prompt.isEmpty()) && (this.uri != null && !this.uri.isEmpty())) {
throw new IllegalArgumentException("Only one of prompt or uri can be provided");
}
if (this.uriTemplateManagerFactory == null) {
this.uriTemplateManagerFactory = new DefaultMcpUriTemplateManagerFactory();
}
}
/**
* Build the callback.
* @return A new callback instance
*/
public abstract R build();
}
}View on GitHub (pinned to 98a7beda4f)