项目简介

Oracle CLI (命令行界面) 旨在为开发者和代理提供一种简单可靠的方式,将提示、文件和数据安全地提交给大型语言模型(LLM),以解决复杂问题。它支持通过 OpenAI API 或浏览器自动化使用 ChatGPT。此外,Oracle 提供了一个内嵌的 Model Context Protocol (MCP) 服务器,允许其他 MCP 客户端(如 AI 代理或编辑器插件)通过标准化的 JSON-RPC 协议访问其强大的功能,包括执行模型咨询和获取会话数据。

主要功能点

  • 灵活的LLM交互: 可通过OpenAI API直接调用模型,或通过浏览器自动化使用ChatGPT Pro账户。
  • 上下文管理: 支持打包提示和相关文件(支持Glob模式和排除规则)提交给LLM,模型可引用这些文件进行回答。
  • 会话管理: 自动记录每次运行的会话,包括输入、输出、成本和元数据,并支持回顾、重放和清理历史会话。
  • 服务器端搜索: 模型可以利用搜索功能,基于最新信息回答问题。
  • MCP服务器接口: 作为MCP服务器运行,提供标准化的JSON-RPC接口,允许其他LLM客户端调用其核心功能。
    • Consult 工具: 允许MCP客户端提交提示和文件给LLM进行咨询。
    • Sessions 工具: 允许MCP客户端列出或获取特定Oracle会话的详细信息。
    • Session 资源: 提供只读资源,如会话元数据('oracle-session://<id>/metadata')、日志('oracle-session://<id>/log')和请求负载('oracle-session://<id>/request')。

安装步骤

Oracle作为一个Node.js项目,可以通过npm或pnpm进行安装和使用。

  1. 安装 Node.js 和 npm/pnpm: 如果你的系统上还没有安装 Node.js,请先从 Node.js 官网 下载并安装。npm 会随 Node.js 一同安装,你也可以选择安装 pnpm ('npm install -g pnpm')。
  2. 设置 OpenAI API Key (可选,推荐API引擎使用): 如果你计划使用API引擎,需要设置 'OPENAI_API_KEY' 环境变量。
    export OPENAI_API_KEY="sk-YOUR_OPENAI_API_KEY"
    # 或者在项目根目录创建 .env 文件,内容为 OPENAI_API_KEY="sk-YOUR_OPENAI_API_KEY"
  3. 安装 Oracle CLI:
    # 使用 npm
    npm install -g @steipete/oracle
    
    # 或者使用 pnpm
    pnpm install -g @steipete/oracle
    安装完成后,你就可以在命令行中使用 'oracle' 命令了。

MCP服务器配置

Oracle 的 MCP 服务器通过 'oracle-mcp' 命令启动,并使用标准输入/输出 (stdio) 作为传输协议。以下是一个 MCP 客户端连接 Oracle MCP 服务器的示例配置,通常以 JSON 格式提供给 MCP 客户端:

{
  "name": "Oracle MCP Server",
  "type": "stdio",
  "command": "oracle-mcp",
  "args": [],
  "description": "连接到 Oracle CLI 的 MCP 服务器,以执行LLM咨询和管理会话。",
  "tools": [
    {
      "name": "consult",
      "description": "执行一次Oracle LLM咨询会话。支持提交提示、文件、指定模型和引擎。返回会话ID、状态和LLM输出。",
      "input": {
        "type": "object",
        "properties": {
          "prompt": { "type": "string", "description": "要发送给LLM的用户提示。" },
          "files": { "type": "array", "items": { "type": "string" }, "description": "要附加的文件路径列表。" },
          "model": { "type": "string", "description": "要使用的LLM模型(如 'gpt-5-pro' 或 'gpt-5.1')。" },
          "engine": { "type": "string", "enum": ["api", "browser"], "description": "执行引擎('api' 或 'browser')。" },
          "slug": { "type": "string", "description": "自定义会话名称,便于查找。" }
        },
        "required": ["prompt"]
      },
      "output": {
        "type": "object",
        "properties": {
          "sessionId": { "type": "string", "description": "新创建会话的唯一ID。" },
          "status": { "type": "string", "description": "会话的最终状态(如 'completed' 或 'error')。" },
          "output": { "type": "string", "description": "LLM生成的文本输出。" },
          "metadata": { "type": "object", "description": "完整的会话元数据对象。" }
        },
        "required": ["sessionId", "status", "output"]
      }
    },
    {
      "name": "sessions",
      "description": "列出或获取Oracle会话的详细信息。",
      "input": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "description": "可选的会话ID或slug,用于获取特定会话的详细信息。" },
          "hours": { "type": "number", "description": "列出最近多少小时内的会话(默认24小时)。" },
          "limit": { "type": "number", "description": "列出会话的最大数量(默认100)。" },
          "includeAll": { "type": "boolean", "description": "设置为true时,列出所有会话,忽略时间范围。" },
          "detail": { "type": "boolean", "description": "设置为true时,获取特定会话的完整详细信息,包括日志和请求负载。" }
        }
      },
      "output": {
        "type": "object",
        "oneOf": [
          {
            "properties": {
              "entries": { "type": "array", "items": { "type": "object" }, "description": "会话列表摘要。" },
              "total": { "type": "number", "description": "匹配的会话总数。" },
              "truncated": { "type": "boolean", "description": "如果结果被截断,则为true。" }
            },
            "required": ["entries", "total", "truncated"]
          },
          {
            "properties": {
              "session": { "type": "object", "description": "特定会话的详细数据。" }
            },
            "required": ["session"]
          }
        ]
      }
    }
  ],
  "resources": [
    {
      "uri_template": "oracle-session://{id}/metadata",
      "read_only": true,
      "description": "读取特定Oracle会话的元数据。",
      "variables": {
        "id": { "type": "string", "description": "要读取元数据的会话ID。" }
      }
    },
    {
      "uri_template": "oracle-session://{id}/log",
      "read_only": true,
      "description": "读取特定Oracle会话的完整日志输出。",
      "variables": {
        "id": { "type": "string", "description": "要读取日志的会话ID。" }
      }
    },
    {
      "uri_template": "oracle-session://{id}/request",
      "read_only": true,
      "description": "读取特定Oracle会话的原始请求负载。",
      "variables": {
        "id": { "type": "string", "description": "要读取请求负载的会话ID。" }
      }
    }
  ]
}

基本使用方法

通过命令行工具直接使用 Oracle:

  • 执行一次API调用(带文件):
    oracle --prompt "总结一下风险登记册" --file docs/risk-register.md docs/risk-matrix.md
  • 执行一次浏览器自动化调用(无需API Key):
    oracle --engine browser --prompt "审查 TypeScript 数据层" --file "src/**/*.ts" --file "!src/**/*.test.ts"
  • 查看历史会话:
    oracle status # 列出最近24小时的会话
    oracle session <会话ID> # 查看特定会话的详细输出
    oracle status --clear --hours 168 # 清理一周前的旧会话

信息

分类

开发者工具