Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ maven.install(
"com.github.vorburger.adk-java:google-adk:0c4eed584f",
"com.github.vorburger.adk-java:google-adk-dev:0c4eed584f",
"org.commonmark:commonmark:0.25.0",
"io.modelcontextprotocol.sdk:mcp:0.14.1",
],

# NB: Never de-activate duplicate_version_warning = "error"!
Expand Down
3 changes: 3 additions & 0 deletions MODULE.bom.handlebars.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ bom:
# https://github.com/commonmark/commonmark-java
- "org.commonmark:commonmark:0.25.0"

# Beware of https://github.com/enola-dev/enola/issues/1857
- io.modelcontextprotocol.sdk:mcp:0.14.1

bomx:
- "com.github.vorburger.adk-java:google-adk-langchain4j:{{version.adk}}":
exclusions:
Expand Down
2 changes: 2 additions & 0 deletions MODULE.update.bash
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ mv MODULE.bazel.new MODULE.bazel

REPIN=1 bazel run @maven//:pin

tools/javac/classpath.bash

./test.bash
4 changes: 2 additions & 2 deletions docs/dev/bazel.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@

As per https://github.com/bazelbuild/rules_jvm_external/blob/master/README.md#updating-maven_installjson :

1. Edit [dependencies](dependencies.md) in [`WORKSPACE.bazel`](//WORKSPACE.bazel) (later [`MODULE.bazel`](//MODULE.bazel))
1. Edit [dependencies](dependencies.md) in [`MODULE.bom.handlebars.yaml`](//MODULE.bom.handlebars.yaml)

1. `REPIN=1 bazelisk run @maven//:pin`
1. Run `MODULE.update.bash`

PS: Use `bazelisk query "@maven//:*"` to see all targets.

Expand Down
5 changes: 4 additions & 1 deletion docs/dev/dependencies.txt
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,10 @@ io.grpc:grpc-util:1.75.0
io.grpc:grpc-xds:1.69.0
io.micrometer:micrometer-commons:1.14.2
io.micrometer:micrometer-observation:1.14.2
io.modelcontextprotocol.sdk:mcp:0.11.3
io.modelcontextprotocol.sdk:mcp:0.14.1
io.modelcontextprotocol.sdk:mcp-core:0.14.1
io.modelcontextprotocol.sdk:mcp-json:0.14.1
io.modelcontextprotocol.sdk:mcp-json-jackson2:0.14.1
io.netty:netty-buffer:4.1.124.Final
io.netty:netty-codec:4.1.124.Final
io.netty:netty-codec-http:4.1.124.Final
Expand Down
12 changes: 8 additions & 4 deletions docs/use/mcp/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,26 @@ This is similar to the [MCP Inspector](https://github.com/modelcontextprotocol/i

## Call MCP Tool

```bash cd ../.././..
$ ./enola mcp call-tool modelcontextprotocol/everything echo '{"message":"hi"}'
<!-- TODO Re-add the 'bash cd ../.././..' header AFTER https://github.com/enola-dev/enola/issues/1862 is fixed... -->

```sh
$ ./enola -v mcp call-tool modelcontextprotocol/everything echo '{"message":"hi"}'
...
```

## List MCP Tools

```bash $? cd ../.././..
<!-- TODO Re-add the 'bash $? cd ../.././..' header AFTER https://github.com/enola-dev/enola/issues/1862 is fixed... -->

```sh
$ ./enola mcp list-tools --help
...
```

<!-- TODO This doesn't work?!

```bash cd ../.././..
$ ./enola mcp list-tools
$ ./enola -vv mcp list-tools
...
```
--->
2 changes: 1 addition & 1 deletion java/dev/enola/ai/adk/tool/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ java_library(
"//java/dev/enola/common/name",
# "@maven//:com_google_adk_google_adk",
"@maven//:com_github_vorburger_adk_java_google_adk",
"@maven//:io_modelcontextprotocol_sdk_mcp",
"@maven//:io_modelcontextprotocol_sdk_mcp_core",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_genai_google_genai",
"@maven//:com_google_guava_guava",
Expand Down
4 changes: 3 additions & 1 deletion java/dev/enola/ai/mcp/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ java_library(
"//java/dev/enola/common/io",
"//java/dev/enola/common/io/object",
"//java/dev/enola/common/io/object/jackson",
"//java/dev/enola/common/jackson",
"//java/dev/enola/common/name",
"//java/dev/enola/common/secret",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:io_modelcontextprotocol_sdk_mcp",
"@maven//:io_modelcontextprotocol_sdk_mcp_core",
"@maven//:io_modelcontextprotocol_sdk_mcp_json_jackson2",
"@maven//:org_jspecify_jspecify",
"@maven//:org_slf4j_slf4j_api",
],
Expand Down
8 changes: 6 additions & 2 deletions java/dev/enola/ai/mcp/McpLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/
package dev.enola.ai.mcp;

import static dev.enola.ai.mcp.McpServerConnectionsConfig.ServerConnection.Type.*;
import static dev.enola.ai.mcp.McpServerConnectionsConfig.ServerConnection.Type.http;
import static dev.enola.ai.mcp.McpServerConnectionsConfig.ServerConnection.Type.sse;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
Expand All @@ -31,6 +31,7 @@
import dev.enola.common.io.object.ObjectReader;
import dev.enola.common.io.object.jackson.JacksonObjectReaderWriterChain;
import dev.enola.common.io.resource.ReadableResource;
import dev.enola.common.jackson.ObjectMappers;
import dev.enola.common.name.NamedTypedObjectProvider;
import dev.enola.common.secret.SecretManager;

Expand All @@ -40,6 +41,7 @@
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.ServerParameters;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapper;
import io.modelcontextprotocol.spec.McpClientTransport;
import io.modelcontextprotocol.spec.McpSchema;

Expand Down Expand Up @@ -148,7 +150,9 @@ private McpClientTransport createTransport(
switch (connectionConfig.type) {
case stdio -> {
var params = createStdIoServerParameters(connectionConfig);
var transport = new StdioClientTransport(params);
var transport =
new StdioClientTransport(
params, new JacksonMcpJsonMapper(ObjectMappers.INSTANCE));
transport.setStdErrorHandler(new McpServerStdErrLogConsumer(origin));
return transport;
}
Expand Down
4 changes: 3 additions & 1 deletion java/dev/enola/ai/mcp/cli/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ java_library(
"//java/dev/enola/common/io",
"//java/dev/enola/common/io/iri",
"//java/dev/enola/common/io/object/jackson",
"//java/dev/enola/common/jackson",
"//java/dev/enola/common/secret/auto",
"@maven//:com_google_guava_guava",
"@maven//:info_picocli_picocli",
"@maven//:io_modelcontextprotocol_sdk_mcp",
"@maven//:io_modelcontextprotocol_sdk_mcp_core",
"@maven//:io_modelcontextprotocol_sdk_mcp_json_jackson2",
"@maven//:org_jspecify_jspecify",
"@maven//:org_slf4j_slf4j_api",
],
Expand Down
9 changes: 8 additions & 1 deletion java/dev/enola/ai/mcp/cli/CallToolCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@
import dev.enola.common.io.resource.FileResource;
import dev.enola.common.io.resource.ResourceProvider;
import dev.enola.common.io.resource.ResourceProviders;
import dev.enola.common.jackson.ObjectMappers;
import dev.enola.common.secret.auto.AutoSecretManager;

import io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapper;
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;

import org.jspecify.annotations.Nullable;
Expand Down Expand Up @@ -72,7 +74,12 @@ public Integer call() throws Exception {
mcpOptions.load(loader, rp);
}
var toolClient = loader.get(server, "CLI");
var callToolRequest = new CallToolRequest(tool, argumentsAsJson);
var callToolRequest =
CallToolRequest.builder()
.name(tool)
.arguments(
new JacksonMcpJsonMapper(ObjectMappers.INSTANCE), argumentsAsJson)
.build();
var callToolResult = toolClient.callTool(callToolRequest);
for (var content : callToolResult.content()) {
System.out.println(content);
Expand Down
8 changes: 8 additions & 0 deletions java/dev/enola/common/jackson/ObjectMappers.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@

public final class ObjectMappers {

public static final ObjectMapper INSTANCE = newObjectMapper();

private static ObjectMapper newObjectMapper() {
var objectMapper = new ObjectMapper();
configure(objectMapper);
return objectMapper;
}

/** Configure the given ObjectMapper with Enola-specific settings. */
public static void configure(ObjectMapper mapper) {
// Do NOT use mapper.findAndRegisterModules();
Expand Down
88 changes: 78 additions & 10 deletions maven_install.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
"__INPUT_ARTIFACTS_HASH": -2011315360,
"__RESOLVED_ARTIFACTS_HASH": 1370887039,
"__INPUT_ARTIFACTS_HASH": 806950290,
"__RESOLVED_ARTIFACTS_HASH": -219549620,
"conflict_resolution": {
"com.github.multiformats:java-multihash:d238c77f11a0ff33970ad43578ae11f049324848": "com.github.multiformats:java-multihash:1.3.6",
"com.google.j2objc:j2objc-annotations:2.8": "com.google.j2objc:j2objc-annotations:3.0.0",
Expand Down Expand Up @@ -1230,10 +1230,30 @@
},
"io.modelcontextprotocol.sdk:mcp": {
"shasums": {
"jar": "a5490c9f2d5c19126d00ed0983bf991c4d7538ee7b0c74b58959d768613043b3",
"sources": "cb93adaed2e478baedc18585a532e8158e9cdc9031ea065e0b8192e34121a155"
"jar": "3cdb040a96d4890099ce14be547c35ca2e740547af6fa677afe1243cccb8e760"
},
"version": "0.11.3"
"version": "0.14.1"
},
"io.modelcontextprotocol.sdk:mcp-core": {
"shasums": {
"jar": "7f34586cc4ab1d7684cfe65183989c9290a2600538c3268a7de3463feb9798f6",
"sources": "98d2b252aa3dcdcfbb48a0e235a67b5425e9e2ac901852ede541a0c055c5b24c"
},
"version": "0.14.1"
},
"io.modelcontextprotocol.sdk:mcp-json": {
"shasums": {
"jar": "088fb3e6c50dde354f403a5ec064b9e32d16e217d1a73275b239dfb168723ff0",
"sources": "4a5c761a7fdbe886d61cd87692d40748b0e71733f5b884f676c8fff16eca7118"
},
"version": "0.14.1"
},
"io.modelcontextprotocol.sdk:mcp-json-jackson2": {
"shasums": {
"jar": "8d09a0e827b79eb58827b77433fcf09857d851c81ef49941d7e77725bde3220a",
"sources": "34ae0b2e7abdddd8bf324a5b800b109f2a54c03c879276c5fbbf0724fe87ea1f"
},
"version": "0.14.1"
},
"io.netty:netty-buffer": {
"shasums": {
Expand Down Expand Up @@ -3778,11 +3798,20 @@
"io.micrometer:micrometer-commons"
],
"io.modelcontextprotocol.sdk:mcp": [
"com.fasterxml.jackson.core:jackson-databind",
"com.networknt:json-schema-validator",
"io.modelcontextprotocol.sdk:mcp-core",
"io.modelcontextprotocol.sdk:mcp-json-jackson2"
],
"io.modelcontextprotocol.sdk:mcp-core": [
"com.fasterxml.jackson.core:jackson-annotations",
"io.modelcontextprotocol.sdk:mcp-json",
"io.projectreactor:reactor-core",
"org.slf4j:slf4j-api"
],
"io.modelcontextprotocol.sdk:mcp-json-jackson2": [
"com.fasterxml.jackson.core:jackson-databind",
"com.networknt:json-schema-validator",
"io.modelcontextprotocol.sdk:mcp-json"
],
"io.netty:netty-buffer": [
"io.netty:netty-common"
],
Expand Down Expand Up @@ -6195,14 +6224,26 @@
"io.micrometer.observation.docs",
"io.micrometer.observation.transport"
],
"io.modelcontextprotocol.sdk:mcp": [
"io.modelcontextprotocol.sdk:mcp-core": [
"io.modelcontextprotocol.client",
"io.modelcontextprotocol.client.transport",
"io.modelcontextprotocol.client.transport.customizer",
"io.modelcontextprotocol.common",
"io.modelcontextprotocol.json",
"io.modelcontextprotocol.json.schema",
"io.modelcontextprotocol.server",
"io.modelcontextprotocol.server.transport",
"io.modelcontextprotocol.spec",
"io.modelcontextprotocol.util"
],
"io.modelcontextprotocol.sdk:mcp-json": [
"io.modelcontextprotocol.json",
"io.modelcontextprotocol.json.schema"
],
"io.modelcontextprotocol.sdk:mcp-json-jackson2": [
"io.modelcontextprotocol.json.jackson",
"io.modelcontextprotocol.json.schema.jackson"
],
"io.netty:netty-buffer": [
"io.netty.buffer",
"io.netty.buffer.search"
Expand Down Expand Up @@ -10103,7 +10144,12 @@
"io.micrometer:micrometer-observation",
"io.micrometer:micrometer-observation:jar:sources",
"io.modelcontextprotocol.sdk:mcp",
"io.modelcontextprotocol.sdk:mcp:jar:sources",
"io.modelcontextprotocol.sdk:mcp-core",
"io.modelcontextprotocol.sdk:mcp-core:jar:sources",
"io.modelcontextprotocol.sdk:mcp-json",
"io.modelcontextprotocol.sdk:mcp-json-jackson2",
"io.modelcontextprotocol.sdk:mcp-json-jackson2:jar:sources",
"io.modelcontextprotocol.sdk:mcp-json:jar:sources",
"io.netty:netty-buffer",
"io.netty:netty-buffer:jar:sources",
"io.netty:netty-codec",
Expand Down Expand Up @@ -10949,7 +10995,12 @@
"io.micrometer:micrometer-observation",
"io.micrometer:micrometer-observation:jar:sources",
"io.modelcontextprotocol.sdk:mcp",
"io.modelcontextprotocol.sdk:mcp:jar:sources",
"io.modelcontextprotocol.sdk:mcp-core",
"io.modelcontextprotocol.sdk:mcp-core:jar:sources",
"io.modelcontextprotocol.sdk:mcp-json",
"io.modelcontextprotocol.sdk:mcp-json-jackson2",
"io.modelcontextprotocol.sdk:mcp-json-jackson2:jar:sources",
"io.modelcontextprotocol.sdk:mcp-json:jar:sources",
"io.netty:netty-buffer",
"io.netty:netty-buffer:jar:sources",
"io.netty:netty-codec",
Expand Down Expand Up @@ -11970,6 +12021,22 @@
"io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor"
]
},
"io.modelcontextprotocol.sdk:mcp-json-jackson2": {
"io.modelcontextprotocol.json.McpJsonMapperSupplier": [
"io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapperSupplier"
],
"io.modelcontextprotocol.json.schema.JsonSchemaValidatorSupplier": [
"io.modelcontextprotocol.json.schema.jackson.JacksonJsonSchemaValidatorSupplier"
]
},
"io.modelcontextprotocol.sdk:mcp-json-jackson2:jar:sources": {
"io.modelcontextprotocol.json.McpJsonMapperSupplier": [
"io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapperSupplier"
],
"io.modelcontextprotocol.json.schema.JsonSchemaValidatorSupplier": [
"io.modelcontextprotocol.json.schema.jackson.JacksonJsonSchemaValidatorSupplier"
]
},
"io.netty:netty-common": {
"reactor.blockhound.integration.BlockHoundIntegration": [
"io.netty.util.internal.Hidden$NettyBlockHoundIntegration"
Expand Down Expand Up @@ -13312,6 +13379,7 @@
"com.github.vorburger.adk-java:google-adk:jar:sources",
"com.google.guava:listenablefuture:jar:sources",
"guru.nidi.com.eclipsesource.j2v8:j2v8_linux_x86_64:jar:sources",
"io.modelcontextprotocol.sdk:mcp:jar:sources",
"org.apache.tomcat:annotations-api:jar:sources"
],
"version": "2"
Expand Down
Loading