diff --git a/jcommon/mcp/mcp-elasticsearch/pom.xml b/jcommon/mcp/mcp-elasticsearch/pom.xml
new file mode 100644
index 0000000000..5d21fa306d
--- /dev/null
+++ b/jcommon/mcp/mcp-elasticsearch/pom.xml
@@ -0,0 +1,160 @@
+
+
+ 4.0.0
+
+ run.mone
+ mcp
+ 1.6.1-jdk21-SNAPSHOT
+
+
+ run.mone.mcp.es
+ mcp-elasticsearch
+ 0.0.1-SNAPSHOT
+ mcp-es
+ mcp-es
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 21
+
+
+
+
+
+ org.springframework
+ spring-core
+ 6.2.1
+
+
+
+ org.springframework
+ spring-context
+ 6.2.1
+
+
+
+ org.springframework
+ spring-webmvc
+ 6.2.1
+
+
+
+ run.mone
+ hive
+ 1.6.1-jdk21-SNAPSHOT
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.18.2
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.18.2
+
+
+
+ com.google.code.gson
+ gson
+ 2.11.0
+
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+ 7.17.21
+
+
+
+ io.projectreactor
+ reactor-core
+ 3.7.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 3.4.1
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+ ch.qos.logback
+ logback-core
+ ${logback.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.17.1
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.17.1
+
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.11.0
+
+ 21
+ 21
+ true
+ UTF-8
+
+ ${project.basedir}/src/main/java
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.7.14
+
+ run.mone.mcp.elasticsearch.ElasticsearchMcpApplication
+ app
+
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/ElasticsearchMcpApplication.java b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/ElasticsearchMcpApplication.java
new file mode 100644
index 0000000000..f270822b10
--- /dev/null
+++ b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/ElasticsearchMcpApplication.java
@@ -0,0 +1,15 @@
+package run.mone.mcp.elasticsearch;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@ComponentScan("run.mone.mcp.elasticsearch")
+public class ElasticsearchMcpApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ElasticsearchMcpApplication.class, args);
+ }
+
+}
diff --git a/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/config/McpStdioTransportConfig.java b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/config/McpStdioTransportConfig.java
new file mode 100644
index 0000000000..f88c6c15df
--- /dev/null
+++ b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/config/McpStdioTransportConfig.java
@@ -0,0 +1,17 @@
+package run.mone.mcp.elasticsearch.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import run.mone.hive.mcp.server.transport.StdioServerTransport;
+
+@Configuration
+@ConditionalOnProperty(name = "stdio.enabled", havingValue = "true")
+public class McpStdioTransportConfig {
+
+ @Bean
+ StdioServerTransport stdioServerTransport(ObjectMapper mapper){
+ return new StdioServerTransport(mapper);
+ }
+}
diff --git a/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/function/ElasticsearchFunction.java b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/function/ElasticsearchFunction.java
new file mode 100644
index 0000000000..50c1e1d518
--- /dev/null
+++ b/jcommon/mcp/mcp-elasticsearch/src/main/java/run/mone/mcp/elasticsearch/function/ElasticsearchFunction.java
@@ -0,0 +1,215 @@
+package run.mone.mcp.elasticsearch.function;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpHost;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
+import org.elasticsearch.action.delete.DeleteRequest;
+import org.elasticsearch.action.delete.DeleteResponse;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.action.update.UpdateResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.xcontent.XContentType;
+import run.mone.hive.mcp.spec.McpSchema;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+@Data
+@Slf4j
+public class ElasticsearchFunction implements Function