增加注解

This commit is contained in:
herui 2025-06-27 21:36:52 +08:00
parent 88ef47c0eb
commit 876bdfee08
12 changed files with 242 additions and 18 deletions

19
.idea/compiler.xml generated Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="crm-mcp" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="crm-mcp" options="-parameters" />
<module name="spring-ai-alibaba-examples" options="-parameters" />
</option>
</component>
</project>

9
.idea/encodings.xml generated Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/crm-mcp/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/crm-mcp/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

40
.idea/jarRepositories.xml generated Normal file
View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="aliyunmaven" />
<option name="name" value="aliyun" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="spring-milestones" />
<option name="name" value="Spring Milestones" />
<option name="url" value="https://repo.spring.io/milestone" />
</remote-repository>
<remote-repository>
<option name="id" value="sonatype" />
<option name="name" value="OSS Sonatype" />
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="spring-snapshots" />
<option name="name" value="Spring Snapshots" />
<option name="url" value="https://repo.spring.io/snapshot" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

12
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

77
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="ddd6c6ff-ae8b-4e68-859a-d7aab5323e4f" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/crm-mcp/src/main/java/net/rzdata/mcp/server/crm/CrmMcpService.java" beforeDir="false" afterPath="$PROJECT_DIR$/crm-mcp/src/main/java/net/rzdata/mcp/server/crm/CrmMcpService.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="useMavenConfig" value="true" />
</MavenGeneralSettings>
</option>
</component>
<component name="ProjectId" id="2z55RJ3euK88THyWayd3JSnT2W1" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="false" />
<option name="showLibraryContents" value="true" />
<option name="showMembers" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RequestMappingsPanelOrder0": "0",
"RequestMappingsPanelOrder1": "1",
"RequestMappingsPanelWidth0": "75",
"RequestMappingsPanelWidth1": "75",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"last_opened_file_path": "/Users/mac/Desktop/rzData/gpt/crm-mcp",
"node.js.detected.package.eslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"spring.configuration.checksum": "0013e5a0b31866f0daf0a709f089f764",
"vue.rearranger.settings.migration": "true"
}
}]]></component>
<component name="RunManager">
<configuration name="McpServerApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
<module name="crm-mcp" />
<option name="SPRING_BOOT_MAIN_CLASS" value="net.rzdata.mcp.server.crm.McpServerApplication" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="ddd6c6ff-ae8b-4e68-859a-d7aab5323e4f" name="Changes" comment="" />
<created>1751008087769</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1751008087769</updated>
<workItem from="1751008089369" duration="200000" />
<workItem from="1751008292968" duration="8121000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

View File

@ -31,7 +31,7 @@ public class CrmMcpService {
} }
@Tool(description = "根据客户名称或客户编码查询客户负责人。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。如果提取到多个值则输出目前只能查询单个客户数据") @Tool(description = "根据客户名称或客户编码查询客户负责人。并返回相关的信息")
public String getClientResponsible( public String getClientResponsible(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName
@ -47,7 +47,7 @@ public class CrmMcpService {
return executeRequest("ai/query/getClientResponsible", requestBody); return executeRequest("ai/query/getClientResponsible", requestBody);
} }
@Tool(description = "根据订单编码(即订单号)查询订单负责人。orderCode是必填项如果提取不到则输出请告知需要查询的订单号") @Tool(description = "根据订单编码(即订单号)查询订单负责人。并返回相关的信息")
public String getOrderSaller( public String getOrderSaller(
@ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode @ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode
) { ) {
@ -59,12 +59,12 @@ public class CrmMcpService {
return executeRequest("ai/query/getOrderSaller", requestBody); return executeRequest("ai/query/getOrderSaller", requestBody);
} }
@Tool(description = "根据客户名称或客户编码查询某个时间段内的订单销售额。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。如果提取到多个值则输出目前只能查询单个客户数据。对于'去年'、'今年'这种时间词,需要结合当前系统时间来判断") @Tool(description = "根据客户名称或客户编码查询某个时间段内的订单销售额。并返回相关的信息")
public String sumOrderTotalForClientInTime( public String sumOrderTotalForClientInTime(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName, @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime, @ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String endTime @ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-12-31 00:00:00。非必填", required = false) String endTime
) { ) {
JSONObject requestBody = new JSONObject(); JSONObject requestBody = new JSONObject();
@ -76,13 +76,13 @@ public class CrmMcpService {
return executeRequest("ai/query/sumOrderTotalForClientInTime", requestBody); return executeRequest("ai/query/sumOrderTotalForClientInTime", requestBody);
} }
@Tool(description = "根据客户名称或客户编码查询某个时间段内购买的某个产品货号的数量。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。productnum必填如果提取不到则输出请提供需要查询的货号。startTime和endTime必填如果提取不到则输出请提供需要查询的采购时间范围") @Tool(description = "根据客户名称或客户编码查询某个时间段内购买的某个产品货号的数量。并返回相关的信息")
public String sumProductNumForClientInTime( public String sumProductNumForClientInTime(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'等组织例如张三课题组广州小懒科技有限公司。与clientCode必须二选一", required = false) String clientName, @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'等组织例如张三课题组广州小懒科技有限公司。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "产品货号,一般类似于'XXXX-XX'格式例如C112-01。必填参数", required = false) String productnum, @ToolParam(description = "产品货号,一般类似于'XXXX-XX'格式例如C112-01。", required = false) String productnum,
@ToolParam(description = "采购开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。必填参数", required = false) String startTime, @ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。", required = false) String startTime,
@ToolParam(description = "采购结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。必填参数", required = false) String endTime @ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-12-31 00:00:00。", required = false) String endTime
) { ) {
JSONObject requestBody = new JSONObject(); JSONObject requestBody = new JSONObject();
requestBody.put("clientCode", clientCode); requestBody.put("clientCode", clientCode);
@ -94,7 +94,7 @@ public class CrmMcpService {
return executeRequest("ai/query/sumProductNumForClientInTime", requestBody); return executeRequest("ai/query/sumProductNumForClientInTime", requestBody);
} }
@Tool(description = "根据订单编码(即订单号)查询订单购买的产品明细。orderCode是必填项如果提取不到则输出请告知需要查询的订单号") @Tool(description = "根据订单编码(即订单号)查询订单购买的产品明细,订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'。并返回相关的信息")
public String detailOrderProduct( public String detailOrderProduct(
@ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode @ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode
) { ) {
@ -106,7 +106,7 @@ public class CrmMcpService {
return executeRequest("ai/query/detailOrderProduct", requestBody); return executeRequest("ai/query/detailOrderProduct", requestBody);
} }
@Tool(description = "根据客户名称或客户编码查询某个时间段内购买的产品主货号列表") @Tool(description = "根据客户名称或客户编码查询某个时间段内购买的产品主货号列表。并返回相关的信息")
public String listProductForClientInTime( public String listProductForClientInTime(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName, @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ -122,7 +122,7 @@ public class CrmMcpService {
return executeRequest("ai/query/listProductForClientInTime", requestBody); return executeRequest("ai/query/listProductForClientInTime", requestBody);
} }
@Tool(description = "查询客户在某个时间段内的欠款额") @Tool(description = "查询客户在某个时间段内的欠款额。并返回相关的信息")
public String getUnpaidAmountForClient( public String getUnpaidAmountForClient(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName, @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ -138,7 +138,7 @@ public class CrmMcpService {
return executeRequest("ai/query/getUnpaidAmountForClient", requestBody); return executeRequest("ai/query/getUnpaidAmountForClient", requestBody);
} }
@Tool(description = "根据主货号查询某个时间段内购买过该产品的客户名称列表") @Tool(description = "根据主货号查询某个时间段内购买过该产品的客户名称列表。并返回相关的信息")
public String listClientsByMainNumInTime( public String listClientsByMainNumInTime(
@ToolParam(description = "主货号,一般类似于'XXXX-XXXX'格式例如1234-5678", required = false) String mainNum, @ToolParam(description = "主货号,一般类似于'XXXX-XXXX'格式例如1234-5678", required = false) String mainNum,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime, @ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ -152,7 +152,7 @@ public class CrmMcpService {
return executeRequest("ai/query/listClientsByMainNumInTime", requestBody); return executeRequest("ai/query/listClientsByMainNumInTime", requestBody);
} }
@Tool(description = "根据客户编码或客户名称查询时间区间内的订单列表") @Tool(description = "根据客户编码或客户名称查询时间区间内的订单列表。并返回相关的信息")
public String listOrdersByClientInTime( public String listOrdersByClientInTime(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode, @ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName, @ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ -168,7 +168,7 @@ public class CrmMcpService {
return executeRequest("ai/query/listOrdersByClientInTime", requestBody); return executeRequest("ai/query/listOrdersByClientInTime", requestBody);
} }
@Tool(description = "根据订单编码查询订单信息。orderCode是必填项如果提取不到则输出请告知需要查询的订单号") @Tool(description = "根据订单编码(即订单号)查询订单信息。并返回相关的信息")
public JSONObject getOrderInfoByCode( public JSONObject getOrderInfoByCode(
@ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode @ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode
) { ) {
@ -181,7 +181,7 @@ public class CrmMcpService {
return JSONObject.parseObject(executed); return JSONObject.parseObject(executed);
} }
@Tool(description = "根据合同编码查询下游订单编码列表。contractCode是必填项如果提取不到则输出请告知需要查询的合同编码") @Tool(description = "根据合同编码查询下游订单编码列表。并返回相关的信息")
public String listOrdersByContractCode( public String listOrdersByContractCode(
@ToolParam(description = "合同编码,值一般是由字母、数字和'-'组成的合同标识符") String contractCode @ToolParam(description = "合同编码,值一般是由字母、数字和'-'组成的合同标识符") String contractCode
) { ) {
@ -197,6 +197,4 @@ public class CrmMcpService {
public String getCurrentTime() { public String getCurrentTime() {
return DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); return DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
} }
}
}

View File

@ -0,0 +1,20 @@
crm:
url: https://www.rzdata.net/bcrm-statis-jwt/
tenantId: BIO
token: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJJUXdrczhuUWc4NnJPQkpuenJDUThtbjl1N3FEQ2lWZyJ9.91GO7OMhVbc0tLBRZ7HYiFDEA92PXE7H1gHduwxWu2I
spring:
webflux:
base-path: /crm-mcp
ai:
mcp:
server:
name: crm-mcp-server
version: 0.0.1
type: ASYNC
# 配置 URL 前缀
base-url: /crm-mcp
# 配置 sse 的根路径,默认值为 /sse
sse-endpoint: /sse
sse-message-endpoint: /mcp

View File

@ -0,0 +1,43 @@
#
# Copyright 2025-2026 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# spring.main.web-application-type=none
# NOTE: You must disable the banner and the console logging
# to allow the STDIO transport to work !!!
# Config reference: https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html#_webflux_server_configuration
spring:
main:
banner-mode: off
profiles:
active: dev
ai:
mcp:
server:
name: crm-mcp-server
version: 0.0.1
type: ASYNC # Recommended for reactive applications
# 配置 sse 的根路径,包含前缀 /crm-mcp
# 下面的最终路径为 ip:port/crm-mcp/sse/mcp
sse-endpoint: /crm-mcp/sse
sse-message-endpoint: /mcp
capabilities:
tool: true
resource: true
prompt: true
completion: true
# logging.pattern.console=