-
Notifications
You must be signed in to change notification settings - Fork 270
Open
Labels
bugSomething isn't workingSomething isn't workingwaiting on reporterWaiting for reaction by reporter. Failing that, maintainers will eventually closed it as stale.Waiting for reaction by reporter. Failing that, maintainers will eventually closed it as stale.
Description
problem
McpToolset Do I have to pass the OptionaltoolFilter parameter?
An error occurs when execution is not passed in?
In addition, I believe that the tool design of LlmAgent should be compatible with the MCP configuration under io.modelcontextprotocol, and can be directly used by McpSyncClient
case
public class ToolsTest {
public static void main(String[] args) {
SseServerParameters sseServerParameters = SseServerParameters.builder()
.url("http://appbuilder.baidu.com/v2/ai_search/mcp/")
.sseEndpoint("sse?api_key=bce-v3/ALTAK-3zODLb9qHozIftQlGwez5/2696e92781f5bf1ba1870****")
.build();
StdioServerParameters stdioServerParameters = StdioServerParameters.builder()
.command("npx")
.args(List.of(
"-y",
"modelcontextprotocol/server-filesystem@2025.3.28",
"/Users/fuzhengwei/coding/gitcode/KnowledgePlanet/ai-agent-scaffold/ai-agent-scaffold"
))
.env(new HashMap<>())
.build();
ServerParameters npx = ServerParameters.builder("npx")
.args(List.of(
"-y",
"modelcontextprotocol/server-filesystem@2025.3.28",
"/Users/fuzhengwei/coding/gitcode/KnowledgePlanet/ai-agent-scaffold/ai-agent-scaffold"
))
.env(new HashMap<>()).build();
ArrayList<McpToolset> tools = new ArrayList<>() {{
add(new McpToolset(sseServerParameters, Optional.of(Arrays.asList("ai_search"))));
add(new McpToolset(stdioServerParameters.toServerParameters(), Optional.of(Arrays.asList(
"read_text_file",
"read_media_file",
"read_multiple_files",
"write_file",
"edit_file",
"create_directory",
"list_directory",
"list_directory_with_sizes",
"move_file",
"search_files",
"directory_tree",
"get_file_info",
"list_allowed_directories"))));
}};
OpenAiChatModel openAiChatModel = OpenAiChatModel.builder()
.baseUrl("https://apis.****/v1/")
.apiKey("sk-QidtEz0VSkcngFFc1*****")
.modelName("gpt-4o")
.build();
LlmAgent agent = LlmAgent.builder()
.name("test")
.description("ai agent")
.model(new LangChain4j(openAiChatModel))
// .instruction("""
// 你是一个编程架构师,具备网络检索和分析能力。
// """)
// .tools(tools)
// .tools(new McpToolset(sseServerParameters, Optional.of(Arrays.asList("ai_search"))))
.tools(new McpToolset(stdioServerParameters.toServerParameters(), Optional.of(Arrays.asList(
"read_text_file",
"read_media_file",
"read_multiple_files",
"write_file",
"edit_file",
"create_directory",
"list_directory",
"list_directory_with_sizes",
"move_file",
"search_files",
"directory_tree",
"get_file_info",
"list_allowed_directories"))))
// .tools(new McpToolset(stdioServerParameters.toServerParameters()))
.build();
InMemoryRunner runner = new InMemoryRunner(agent);
Session session = runner
.sessionService()
.createSession("test", "xiaofuge")
.blockingGet();
Flowable<Event> eventsOne = runner.runAsync("xiaofuge", session.id(), Content.fromParts(Part.fromText("你有哪些工具能力")));
System.out.print("\nAgent > ");
eventsOne.blockingForEach(event -> System.out.println(event.stringifyContent()));
try (Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8)) {
while (true) {
System.out.print("\nYou > ");
String userInput = scanner.nextLine();
if ("quit".equalsIgnoreCase(userInput)) {
break;
}
Content userMsg = Content.fromParts(Part.fromText(userInput));
Flowable<Event> events = runner.runAsync("xiaofuge", session.id(), userMsg);
System.out.print("\nAgent > ");
events.blockingForEach(event -> System.out.println(event.stringifyContent()));
}
}
}
}Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingwaiting on reporterWaiting for reaction by reporter. Failing that, maintainers will eventually closed it as stale.Waiting for reaction by reporter. Failing that, maintainers will eventually closed it as stale.