DrSum Java MCP服务器
此项目包括:模型上下文协议(MCP) Java SDK而需要与环境混合的每条反射光线,进行环境采样Dr.Sum数据库分析功能提供,提供MCP服务器。
概要
DrSum MCP Server是AI助手(Claude Desktop等)和应用程序Dr.Sum提供到数据库的连接和分析功能。LLM的Dr.Sum的数据可以直接分析,可以用自然语言进行数据查询和分析。
主要功能
Dr.Sum分析机能
- 基于环境变量的连接管理: MCP在客户端设置中设置环境变量
- 都度接続方式:对每个工具调用进行连接和断开连接,防止资源泄漏
- 元信息获取:获取表结构和示例数据(默认值为3行,可设置)
- SQL执行查询:任意SQL执行查询并查看结果JSON格式检索
- 自动接続管理:用户无需意识到连接
其他功能
- MCP标准准据: Model Context Protocol规范
- STDIO通信:使用标准输入输出的通信
- 安全性:密码保密、环境变量中的安全凭据管理
- 简单的设计:不保持连接状态,不需要状态管理
必要条件
- Java 17以上
- Maven 3.6以上
依存关系
此项目使用以下依赖关系:
MCP Java SDK
io.modelcontextprotocol.sdk:mcp(0.14.1)-MCP Java SDK核心io.modelcontextprotocol.sdk:mcp-bom-依赖性版本控制io.modelcontextprotocol.sdk:mcp-test-测试实用程序
Dr.Sum EA 库
jp.co.dw_sapporo:DrSumEA(5.7.0)-Dr.Sum Enterprise Analytics API
- DBI(Database Interface)机能を使用 - 本地Maven需要在存储库中安装
其他
org.slf4j:slf4j-api(2.0.16)-记录APIch.qos.logback:logback-classic(1.4.14)-记录实现org.junit.jupiter:junit-jupiter(5.10.1)-测试框架
DrSumEA.jar安装
Dr.Sum单击功能区上的DrSumEA.jar本地Maven必须在存储库中安装:
# Windows (PowerShell)
.\mvnw.cmd install:install-file "-Dfile=path\to\DrSumEA.jar" "-DgroupId=jp.co.dw_sapporo" "-DartifactId=DrSumEA" "-Dversion=5.7.0" "-Dpackaging=jar"# Unix/Linux/macOS
./mvnw install:install-file -Dfile=/path/to/DrSumEA.jar -DgroupId=jp.co.dw_sapporo -DartifactId=DrSumEA -Dversion=5.7.0 -Dpackaging=jar安装,安装
这个项目Maven Wrapper中所述修改相应参数的值Maven而需要与环境混合的每条反射光线,进行环境采样。
视窗
- 克隆或下载项目
- 安装相关性
.\mvnw.cmd clean install- 构建项目
.\mvnw.cmd clean compile- 运行测试
.\mvnw.cmd testUnix/Linux/macOS
- 克隆或下载项目
- 安装相关性
./mvnw clean install- 构建项目
./mvnw clean compile- 运行测试
./mvnw test使用方法
方法1:直接从命令行启动(用于开发和测试)
Windows(PowerShell)
# Maven Wrapperを使用して起動
.\mvnw.cmd exec:java "-Dexec.mainClass=com.example.drsum.DrSumMcpServer"
# または起動スクリプトを使用
.\scripts\start-server.batUnix/Linux/macOS
# Maven Wrapperを使用して起動
./mvnw exec:java -Dexec.mainClass="com.example.drsum.DrSumMcpServer"
# または起動スクリプトを使用
./scripts/start-server.sh注意:此方法允许服务器STDIO(标准输入输出)模式下启动JSON-RPC等待消息的输入。通常情况下MCP因为是从客户端自动启动的,所以不需要手动启动。
方法2:可行JAR创建并启动(用于生产分发)
步骤1:构建包
# Windows
.\mvnw.cmd clean package
# Unix/Linux/macOS
./mvnw clean package这将创建以下内容:
target/drsum-java-mcp-1.0.0-SNAPSHOT.jar-主要JAR(无关)target/drsum-java-mcp-1.0.0-SNAPSHOT-fat.jar- Fat JAR(包括依赖关系)target/lib/-从属库(53个JAR文件)
JAR类型:
- 胖JAR:所有依存关系都是一个JAR文件中包含。分发简单,在单个文件中工作。
- 通常JAR:依赖关系是分离的
lib/在动态输入提示中单击JAR需要文件。文件大小变小。
第2步A: Fat JAR 启动(建议-单个文件)
必要条件:
- Java 17已安装
- Fat JAR仅文件
# Windows
java -jar target\drsum-java-mcp-1.0.0-SNAPSHOT-fat.jar
# Unix/Linux/macOS
java -jar target/drsum-java-mcp-1.0.0-SNAPSHOT-fat.jar分发时所需的文件:
drsum-java-mcp-1.0.0-SNAPSHOT-fat.jar # このファイルのみ第2步B: 通常JAR启动(隔离从属关系)
必要条件:
- Java 17已安装
- 主要JAR文件
lib/文件夹中的所有依赖关系(53个JAR文件)- JAR文件和
lib/文件夹位于同一目录中
# Windows
java -jar target\drsum-java-mcp-1.0.0-SNAPSHOT.jar
# Unix/Linux/macOS
java -jar target/drsum-java-mcp-1.0.0-SNAPSHOT.jar分发时所需的文件结构:
your-distribution/
├── drsum-java-mcp-1.0.0-SNAPSHOT.jar # メインJAR
└── lib/ # 依存ライブラリフォルダ
├── mcp-0.14.1.jar
├── jackson-databind-2.17.0.jar
├── slf4j-api-2.0.16.jar
└── ... (他50個のJARファイル)注意: lib/如果找不到文件夹,则会出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: io/modelcontextprotocol/...方法3:MCP从客户端(例如,Claude Desktop)自动启动(推荐)
MCP客户端自动启动和管理服务器。不需要手动启动服务器。
Claude Desktop 中的设置
Claude Desktop在的配置文件中添加以下内容:
配置文件位置:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
设定例1:Maven Wrapperで起动(开発时)
窗户:
{
"mcpServers": {
"drsum": {
"command": "cmd.exe",
"args": [
"/c",
"C:\\mb_dev\\github\\drsum-java-mcp\\mvnw.cmd",
"exec:java",
"-Dexec.mainClass=com.example.drsum.DrSumMcpServer",
"-q"
],
"env": {
"JAVA_HOME": "C:\\java\\jdk-17",
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}Unix/Linux/macOS:
{
"mcpServers": {
"drsum": {
"command": "/path/to/drsum-java-mcp/mvnw",
"args": [
"exec:java",
"-Dexec.mainClass=com.example.drsum.DrSumMcpServer",
"-q"
],
"env": {
"JAVA_HOME": "/path/to/jdk-17",
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}设置示例2A: Fat JAR启动(建议单文件)+环境变量设置
{
"mcpServers": {
"drsum": {
"command": "java",
"args": [
"-Dfile.encoding=UTF-8",
"-jar",
"C:\\mb_dev\\github\\drsum-java-mcp\\target\\drsum-java-mcp-1.0.0-SNAPSHOT-fat.jar"
],
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}重要:
- 环境变数(
env),模板名称将采用不同的格式。Dr.Sum连接信息在此设定。 - 使用日语等多字节文字时
"-Dfile.encoding=UTF-8"的args添加到开头(Windows在环境中尤其重要)。
重要:环境变数(env),模板名称将采用不同的格式。Dr.Sum连接信息在此设定。
设定例2B: 通常JARで起动(依存关系分离)
{
"mcpServers": {
"drsum": {
"command": "java",
"args": [
"-jar",
"C:\\mb_dev\\github\\drsum-java-mcp\\target\\drsum-java-mcp-1.0.0-SNAPSHOT.jar"
],
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}注意: 设置示例2B使用时,需要以下条件:
target/lib/文件夹存在- JAR文件和
lib/文件夹必须位于同一目录中
设置示例3:通过脚本启动
窗户:
{
"mcpServers": {
"drsum": {
"command": "C:\\mb_dev\\github\\drsum-java-mcp\\scripts\\start-server.bat",
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}Unix/Linux/macOS:
{
"mcpServers": {
"drsum": {
"command": "/path/to/drsum-java-mcp/scripts/start-server.sh",
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}设置后的确认
- Claude Desktop重新启动
- 开始新聊天
- MCP“summarize”现在可用作工具
其他MCP客户端使用
其他MCP客户端(VS代码扩展、自定义客户端等)也可以进行同样的设置。基本上:
command:要执行的命令args:命令参数env:环境变数
的双曲正切值。
设置连接信息
Dr.Sum的连接信息MCP客户端设置环境变量(env),模板名称将采用不同的格式。
必须环境变数:
DRSUM_HOST: Dr.Sum服务器主机名或IP地址DRSUM_PORT: Dr.Sum服务器端口号DRSUM_USERNAME:验证用户名DRSUM_PASSWORD:验证密码DRSUM_DATABASE:要连接的数据库名称
可选环境变量:
DRSUM_SCOPES:表作用域定义(JSON格式,可选)
关于表作用域:
根据特定的分析用途,可以限制所需的表视图。通过定义作用域LLM中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
范围定义格式(JSON):
{
"scope_name": ["table1", "table2", "view1"],
"another_scope": ["table3", "table4"]
}设定例:
{
"mcpServers": {
"drsum": {
"command": "java",
"args": ["-Dfile.encoding=UTF-8", "-jar", "path/to/drsum-java-mcp-fat.jar"],
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
"DRSUM_SCOPES": "{\"bug_analysis\": [\"bug_reports\", \"error_logs\", \"v_bug_trends\"], \"sales_analysis\": [\"orders\", \"customers\", \"v_sales_summary\"]}"
}
}
}
}可用工具
关于连接方式:
- 从环境变量读取连接信息
- 各工具调用时自动进行连接、切断(每次连接方式)
- 用户无需意识到连接
list_tables
获取数据库中所有表和视图的列表。
参数:
scope(可选):范围名称。如果指定,则仅返回为该作用域定义的表视图
响应示例:
{
"database": "SALES",
"tables": [
"受注",
"顧客",
"商品"
],
"views": [
"受注ビュー",
"売上サマリー"
],
"total_count": 5
}使用例:
ユーザー: 「このデータベースにどんなテーブルがありますか?」
AI: list_tablesツールを呼び出してテーブル一覧を取得し、説明します
ユーザー: 「bug_analysisスコープで不具合の傾向を分析して」
AI: list_tables(scope="bug_analysis")を呼び出し、スコープに定義されたテーブルのみを対象に分析しますget_metadata
获取表的元信息和示例数据。
参数:
table_name(必需):表名sample_rows(可选):样本数据行数(默认值:3)
响应示例:
{
"table": "受注ビュー",
"columns": [
{
"name": "年",
"display_name": "年",
"type": 2,
"type_name": "INTEGER",
"nullable": false,
"precision": 10,
"scale": 0
},
{
"name": "価格",
"display_name": "価格",
"type": 3,
"type_name": "DECIMAL",
"nullable": true,
"precision": 18,
"scale": 2
}
],
"sample_data": [
["2006", "150000.00"],
["2007", "280000.00"],
["2008", "320000.00"]
]
}execute_query
SQL执行查询并获取结果。
参数:
sql_query(必需):运行SQL查询
响应示例:
{
"columns": [
{"name": "年", "display_name": "年", "type": 2},
{"name": "SUM(価格)", "display_name": "SUM(価格)", "type": 3}
],
"rows": [
["2006", "150000.00"],
["2007", "280000.00"],
["2008", "320000.00"]
],
"row_count": 3
}每次连接方式的优点
- 简单:无需管理连接状态
- 安全:无资源泄漏风险
- 自动:用户无需连接/断开连接
- 安全:通过环境变量管理凭据
每次连接方式的动作
ユーザー: 「受注ビューのデータを分析して」
↓
AI: get_metadata ツールを呼び出し
↓
1. 環境変数から接続情報を読み取り
2. Dr.Sumに接続
3. メタデータとサンプルデータを取得
4. Dr.Sumから切断
↓
AI: データ分析結果を返答故障排除
多字节字符(日语)的乱码
症状:
- SQL在查询或表名中使用日语时会乱码
- 在错误消息中显示一个字符串(例如,“订单视图”显示为Η显示为“繝西”)
原因:
- Windows在环境中Java的默认字符编码MS932(Shift_JIS系)Dr.Sum的UTF-8中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
解决方法(推奨):
MCP在动态输入提示中单击Java启动参数 -Dfile.encoding=UTF-8 添加:
{
"mcpServers": {
"drsum": {
"command": "java",
"args": [
"-Dfile.encoding=UTF-8",
"-jar",
"path/to/drsum-java-mcp-fat.jar"
],
"env": {
"DRSUM_HOST": "localhost",
"DRSUM_PORT": "6001",
"DRSUM_USERNAME": "your-id",
"DRSUM_PASSWORD": "your-password",
"DRSUM_DATABASE": "BUG_DB",
}
}
}
}跨平台支持:
- 此设置为 Windows、Linux、macOS 推荐所有平台 被
- Linux/macOS那嚒通常是默认的UTF-8但是,通过明确指定可以排除环境依赖
検证方法:
- MCP重新启动客户端(例如,Claude Desktop)
- 测试包含日语的表名和查询
- 确认显示正确
例:
ユーザー: 「受注ビューのデータを取得してください」
→ 正常に動作し、日本語が正しく表示されるはずです项目结构
src/
├── main/
│ ├── java/
│ │ └── com/example/drsum/
│ │ └── DrSumMcpServer.java # メインサーバークラス
│ └── resources/
│ └── logback.xml # ログ設定
└── test/
└── java/
└── com/example/drsum/
└── DrSumMcpServerTest.java # テストクラス开発
日志
应用程序将日志输出到以下位置:
- 控制台输出(开发时)
logs/drsum-mcp-server.log(本番环境)
扩张
要添加新功能:
- 定义新工具
createXXXTool()方法创建 - 工具处理逻辑
handleXXXRequest()方法实现 - 在主类中注册工具规格
MCP Java SDK关于
此项目正在使用MCP Java SDK有关详细信息,请参见:
