API 文档

完整的 API 参考和使用指南,帮助您充分利用 MCDR MCP Service 的所有功能

快速开始

基本使用流程

  1. 安装并配置 MCDR MCP Service 插件
  2. 启动 MCP 服务器
  3. 使用 MCP 客户端连接到服务器
  4. 开始发送命令和接收服务器状态

MCP 服务

MCP 服务为 AI 和自动化工具提供标准化接口,支持命令执行、状态查询、日志管理等多种能力。以下为主要服务说明:

get_command_tree

获取MCDR可用命令列表和指令树

参数

  • plugin_id (可选): 指定插件ID以获取特定插件的命令

请求示例

{
  "name": "get_command_tree",
  "arguments": {}
}

带参数示例

{
  "name": "get_command_tree",
  "arguments": {
    "plugin_id": "mcdr_mcp_service"
  }
}

响应格式

{
  "success": true,
  "total_commands": 15,
  "commands": [
    {
      "plugin_id": "mcdr",
      "plugin_name": "MCDReforged Core",
      "command": "!!MCDR status",
      "description": "查看MCDR状态",
      "type": "builtin_command"
    },
    // 更多命令...
  ],
  "timestamp": 1753261523
}

execute_command

执行MCDR命令或Minecraft服务器命令,并捕获真实的命令响应

参数

  • command (必需): 要执行的命令,支持以下格式:
    - MCDR命令:以!!开头,如!!MCDR status
    - Minecraft命令:可以带或不带/前缀,如/listlist
  • source_type (可选): 命令来源类型,可选值:
    - "console" (默认): 以控制台身份执行
    - "player": 以玩家身份执行

特性

  • 智能子命令提示: 当执行的命令返回"未知命令"时,系统会自动查找并返回该命令的所有可用子命令
  • 友好错误处理: 对于无效命令,会提供有用的错误信息和建议

请求示例

{
  "name": "execute_command", 
  "arguments": {
    "command": "!!MCDR status",
    "source_type": "console"
  }
}

Minecraft命令示例

{
  "name": "execute_command", 
  "arguments": {
    "command": "/list"
  }
}

响应格式

{
  "success": true,
  "command": "!!MCDR status",
  "command_id": "cmd_1753261523_1234",
  "output": "MCDR 服务器状态信息的完整响应内容...",
  "responses": ["第一行响应", "第二行响应", "..."],
  "timestamp": 1753261523
}

未知命令响应示例

{
  "success": true,
  "command": "!!MCDR unknown",
  "command_id": "cmd_1753261523_5678",
  "output": "未知命令: !!MCDR unknown\n当前命令没有返回值,以下是它的子命令:\n!!MCDR status - 查看MCDR状态\n!!MCDR help - 显示帮助信息\n...\n工具 mcdr_unknown 可能需要更多参数,请尝试使用 !!MCDR help 获取帮助",
  "timestamp": 1753261523
}

get_server_status

获取MCDR服务器状态信息

参数

  • include_players (可选): 是否包含在线玩家信息,默认为true

请求示例

{
  "name": "get_server_status",
  "arguments": {
    "include_players": true
  }
}

响应格式

{
  "success": true,
  "timestamp": 1753261523,
  "mcdr_status": "running",
  "mcdr_status_detail": "MCDR 版本: 2.x.x\n...",
  "server_running": true,
  "server_startup": true,
  "plugin_list_detail": "已加载的插件: xxx, xxx, ...",
  "players": {
    "list_command_result": "当前有 3 名玩家在线: player1, player2, player3"
  }
}

get_recent_logs

获取最近的服务器日志(支持MCDR和Minecraft日志)

参数

  • lines_count (可选): 要获取的日志行数,范围1-50,默认为20

请求示例

{
  "name": "get_recent_logs",
  "arguments": {
    "lines_count": 30
  }
}

响应格式

{
  "success": true,
  "total_lines": 1250,
  "requested_lines": 30,
  "returned_lines": 30,
  "logs": [
    {
      "line_number": 1220,
      "content": "[2025-01-20 15:30:25] [MCDR/INFO] 玩家加入游戏",
      "timestamp": "2025-01-20 15:30:25",
      "source": "all",
      "is_command": false
    },
    // 更多日志...
  ],
  "timestamp": 1753261523
}

get_logs_range

获取指定范围的服务器日志(支持MCDR和Minecraft日志)

参数

  • start_line (可选): 起始行号(从0开始),默认为0
  • end_line (必需): 结束行号(不包含),最多获取50行

请求示例

{
  "name": "get_logs_range",
  "arguments": {
    "start_line": 100,
    "end_line": 150
  }
}

响应格式

{
  "success": true,
  "total_lines": 1250,
  "start_line": 100,
  "end_line": 150,
  "requested_lines": 50,
  "returned_lines": 50,
  "logs": [
    {
      "line_number": 100,
      "content": "[2025-01-20 15:25:10] [SERVER/INFO] 服务器启动完成",
      "timestamp": "2025-01-20 15:25:10",
      "source": "all",
      "is_command": false
    },
    // 更多日志...
  ],
  "timestamp": 1753261523
}

search_logs

搜索日志内容,支持文本搜索和正则表达式搜索

参数

  • query (必需): 搜索查询字符串
  • use_regex (可选): 是否使用正则表达式搜索,默认为false
  • context_lines (可选): 包含搜索结果的上下文行数,范围0-10,默认为0
  • max_results (可选): 最大返回结果数,范围1-5,默认为5

特性

  • 智能搜索: 支持文本搜索和正则表达式搜索
  • 上下文显示: 可显示搜索结果前后的上下文行
  • 结果排序: 按时间从新到老排序
  • 搜索ID: 每个结果都有唯一的搜索ID用于后续查询

文本搜索示例

{
  "name": "search_logs",
  "arguments": {
    "query": "玩家登录",
    "context_lines": 2
  }
}

正则表达式搜索示例

{
  "name": "search_logs",
  "arguments": {
    "query": "\\[ERROR\\].*exception",
    "use_regex": true,
    "context_lines": 3,
    "max_results": 3
  }
}

响应格式

{
  "success": true,
  "query": "玩家登录",
  "use_regex": false,
  "context_lines": 2,
  "total_matches": 15,
  "returned_results": 5,
  "remaining_results": 10,
  "results": [
    {
      "search_id": 1245,
      "line_number": 1220,
      "content": "[2025-01-20 15:30:25] [SERVER/INFO] 玩家 Steve 登录游戏",
      "timestamp": "2025-01-20 15:30:25",
      "is_command": false,
      "context_before": [
        {
          "line_number": 1218,
          "content": "[2025-01-20 15:30:23] [SERVER/INFO] 服务器正在运行"
        },
        {
          "line_number": 1219,
          "content": "[2025-01-20 15:30:24] [SERVER/INFO] 准备接受连接"
        }
      ],
      "context_after": [
        {
          "line_number": 1221,
          "content": "[2025-01-20 15:30:26] [SERVER/INFO] Steve 获得了成就"
        },
        {
          "line_number": 1222,
          "content": "[2025-01-20 15:30:27] [SERVER/INFO] 世界保存完成"
        }
      ],
      "match_index": 1
    },
    // 更多搜索结果...
  ],
  "timestamp": 1753261523
}

search_logs_by_ids

根据搜索ID范围查询日志

参数

  • start_id (必需): 起始搜索ID
  • end_id (必需): 结束搜索ID
  • context_lines (可选): 包含搜索结果的上下文行数,范围0-10,默认为0

特性

  • ID范围查询: 基于日志的唯一搜索ID进行范围查询
  • 结果限制: 最多返回5个结果,按ID从新到老排序
  • 剩余提示: 显示范围内剩余的结果数量

请求示例

{
  "name": "search_logs_by_ids",
  "arguments": {
    "start_id": 1200,
    "end_id": 1250,
    "context_lines": 1
  }
}

响应格式

{
  "success": true,
  "start_id": 1200,
  "end_id": 1250,
  "context_lines": 1,
  "total_matches": 51,
  "returned_results": 5,
  "remaining_results": 46,
  "results": [
    {
      "search_id": 1250,
      "line_number": 1230,
      "content": "[2025-01-20 15:35:00] [MCDR/INFO] 插件重载完成",
      "timestamp": "2025-01-20 15:35:00",
      "is_command": true,
      "context_before": [
        {
          "line_number": 1229,
          "content": "[2025-01-20 15:34:59] [MCDR/INFO] 正在重载插件"
        }
      ],
      "context_after": [
        {
          "line_number": 1231,
          "content": "[2025-01-20 15:35:01] [MCDR/INFO] 重载完成"
        }
      ],
      "match_index": 1
    },
    // 更多搜索结果...
  ],
  "timestamp": 1753261523
}

MCDR自带命令工具

插件会自动将MCDR自带的命令(以!!MCDR开头)转换为独立的MCP工具,使AI可以直接调用这些命令,而无需使用execute_command工具。

工具命名规则

  • 工具名称格式:mcdr_命令名称,其中命令名称是将!!MCDR后面的部分转换而来
  • 空格会被替换为下划线,特殊字符会被移除

特性

  • 自动命令映射: 自动将MCDR命令映射为独立工具
  • 智能子命令提示: 当命令返回"未知命令"时,自动提供子命令列表
  • 命令缓存: 使用命令映射缓存,提高性能

示例工具

  • mcdr_status: 对应!!MCDR status命令
  • mcdr_plugin_list: 对应!!MCDR plugin list命令
  • mcdr_reload_plugin: 对应!!MCDR reload plugin命令

调用示例

{
  "name": "mcdr_status",
  "arguments": {}
}

响应格式

{
  "success": true,
  "command": "!!MCDR status",
  "output": "MCDR 版本: 2.x.x\n服务器状态: 运行中\n...",
  "timestamp": 1753261523
}

未知命令响应示例

{
  "success": true,
  "command": "!!MCDR unknown",
  "output": "未知命令: !!MCDR unknown\n当前命令没有返回值,以下是它的子命令:\n!!MCDR status - 查看MCDR状态\n!!MCDR help - 显示帮助信息\n...\n工具 mcdr_unknown 可能需要更多参数,请尝试使用 !!MCDR help 获取帮助",
  "timestamp": 1753261523
}

配置选项

配置文件结构

{
  "mcp_server": {
    "host": "localhost",           // MCP 服务器监听地址
    "port": 8080,                  // MCP 服务器端口
    "enabled": true,               // 是否启用 MCP 服务
    "max_connections": 10,         // 最大连接数
    "timeout": 30                  // 超时时间(秒)
  },
  
  "security": {
    "api_key": "your-secret-key",  // API 访问密钥
    "allowed_commands": [          // 允许执行的命令列表
      "list",
      "help",
      "status"
    ],
    "blocked_commands": [          // 禁止执行的命令列表
      "stop",
      "restart"
    ],
    "rate_limit": 100              // 每分钟请求限制
  },
  
  "logging": {
    "level": "INFO",               // 日志级别
    "file": "logs/mcp_service.log", // 日志文件路径
    "max_size": "10MB",            // 单个日志文件最大大小
    "backup_count": 5              // 保留的日志文件数量
  },
  
  "monitoring": {
    "update_interval": 5,          // 状态更新间隔(秒)
    "metrics_enabled": true,       // 是否启用性能监控
    "alerts_enabled": true         // 是否启用告警
  }
}

故障排除

连接被拒绝

错误信息:Connection refused

  • 1. 检查 MCP 服务是否已启动
  • 2. 确认端口配置正确
  • 3. 检查防火墙设置

认证失败

错误信息:401 Unauthorized

  • 1. 检查 API 密钥是否正确
  • 2. 确认密钥格式正确
  • 3. 检查 Authorization 头格式

命令超时

错误信息:Command timeout

  • 1. 增加 timeout 参数值
  • 2. 检查服务器性能
  • 3. 避免执行耗时过长的命令