Skip to content

Commit 907ad46

Browse files
committed
Register MCP protocol classes for reflection
1 parent 4f6440f commit 907ad46

File tree

1 file changed

+26
-0
lines changed
  • mcp/deployment/src/main/java/io/quarkiverse/langchain4j/mcp/deployment

1 file changed

+26
-0
lines changed

mcp/deployment/src/main/java/io/quarkiverse/langchain4j/mcp/deployment/McpProcessor.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import jakarta.enterprise.context.ApplicationScoped;
99

1010
import org.jboss.jandex.AnnotationInstance;
11+
import org.jboss.jandex.ClassInfo;
1112
import org.jboss.jandex.ClassType;
1213
import org.jboss.jandex.DotName;
14+
import org.jboss.jandex.IndexView;
1315

1416
import dev.langchain4j.mcp.client.McpClient;
1517
import dev.langchain4j.service.tool.ToolProvider;
@@ -23,6 +25,9 @@
2325
import io.quarkus.deployment.annotations.BuildStep;
2426
import io.quarkus.deployment.annotations.ExecutionTime;
2527
import io.quarkus.deployment.annotations.Record;
28+
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
29+
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
30+
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
2631

2732
public class McpProcessor {
2833

@@ -75,4 +80,25 @@ public void registerMcpClients(McpBuildTimeConfiguration mcpBuildTimeConfigurati
7580
}
7681
}
7782
}
83+
84+
@BuildStep
85+
public void indexMcpClientDependency(BuildProducer<IndexDependencyBuildItem> index) {
86+
// this is needed for the 'reflectionRegistrations' build step to work
87+
index.produce(new IndexDependencyBuildItem("dev.langchain4j", "langchain4j-mcp"));
88+
}
89+
90+
@BuildStep
91+
public void reflectionRegistrations(BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
92+
CombinedIndexBuildItem indexBuildItem) {
93+
// register everything in the dev.langchain4j.mcp.client.protocol package
94+
String PROTOCOL_PACKAGE_PATTERN = "dev\\.langchain4j\\.mcp\\.client\\.protocol\\..+";
95+
IndexView index = indexBuildItem.getIndex();
96+
for (ClassInfo clazz : index.getKnownClasses()) {
97+
if (clazz.name().toString().matches(PROTOCOL_PACKAGE_PATTERN)) {
98+
reflectiveClass
99+
.produce(ReflectiveClassBuildItem.builder(clazz.name().toString()).fields(true).methods(true).build());
100+
}
101+
}
102+
}
103+
78104
}

0 commit comments

Comments
 (0)