Skip to main content
Glama
README.md
# Oracle MCP Server

A Model Context Protocol (MCP) server that provides a unified interface for consulting oracle AI models (Codex or Claude) via CLI.

## Features

- **Unified Oracle Tool**: Single `consult_oracle` tool that works with either Codex or Claude Code
- **Configurable Models**: Supports custom oracle models and reasoning levels via `~/.oracle-mcp.json`
- **Testable Architecture**: Pure functions for argument construction and CLI invocation
- **Proper Error Handling**: Comprehensive error handling with descriptive messages
- **Type Safe**: Full TypeScript with explicit typing and safe error handling

## Setup

```bash
# Install dependencies
bun install

# Build TypeScript
bun run build

# Run the server
bun run start
```

## Development

```bash
# Run directly with hot reload
bun run dev

# Run test suite
bun test
```

## Tools

### consult_oracle

Consult the oracle for expert reasoning and analysis on complex problems.

**When to use:**
- Planning complex tasks with multiple tradeoffs
- You are ≤90% confident in your approach
- You need analysis of architectural decisions or design patterns

**Parameters:**
- `prompt` (string, required): The question or problem to consult the oracle about. Be specific about context, constraints, and what decision or analysis you need.

**Example prompts:**
- "What's the best approach to structure a TypeScript MCP server for tool integration?"
- "Should we use a monolithic or microservices architecture for this new feature?"
- "What are the tradeoffs between different error handling patterns?"

## Configuration

The server reads `~/.oracle-mcp.json` if it exists to customize behavior. If the file doesn't exist, defaults are used.

### Default Configuration
```json
{
  "model": "gpt-5.1-codex-mini",
  "reasoning": "medium",
  "command": "codex"
}
```

### Example with Codex
```json
{
  "oracle": {
    "model": "gpt-5.1-codex-mini",
    "reasoning": "high",
    "command": "codex"
  }
}
```

### Example with Claude Code
```json
{
  "oracle": {
    "model": "opus",
    "command": "claude"
  }
}
```

## Implementation Details

### CLI Invocation Formats

**Codex:**
```
codex exec --model <model> [-c reasoning_level=<level>] "<prompt>"
```

**Claude:**
```
claude -p --model <model> "<prompt>"
```

### Architecture

- **Single-file server** (`src/index.ts`) implementing the MCP protocol
- **Pure functions** for testability:
  - `buildOracleArgs()`: Constructs CLI arguments as an array (avoiding shell escaping issues)
  - `invokeOracle()`: Executes CLI via `spawnSync` and returns structured result
- **MCP Handlers**:
  - `ListToolsRequestSchema`: Describes `consult_oracle` tool with dynamic descriptions based on config
  - `CallToolRequestSchema`: Handles tool invocation, captures stdout, and returns properly formatted responses
- **Error Handling**: Try-catch with fallback to `String(error)` for non-Error objects
- **Response Format**: All responses wrapped as `{ content: [{ type: "text", text: string }], isError?: boolean }`

### Dependencies

- `@modelcontextprotocol/sdk`: Official MCP protocol implementation and stdio transport

### Testing

Comprehensive test suite (42+ tests) covering:
- Argument construction for both Codex and Claude
- Special character handling (quotes, backticks, dollar signs, newlines)
- Configuration loading and defaults
- Tool description generation
- Error handling and response formatting
- Type safety and MCP protocol compliance

TDQS

A4/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The tool has a clear, singular purpose: consulting an oracle for expert reasoning and analysis.

Naming Consistency5/5

Since there is only one tool, naming consistency is inherently perfect. The tool name 'consult_oracle' follows a clear verb_noun pattern and stands alone without any conflicting naming conventions.

Tool Count2/5

A single tool is generally too few for a server's purpose, as it limits functionality and scope. While the tool is well-defined, the server likely has a narrow or incomplete surface, making it feel thin and underdeveloped for typical MCP server use cases.

Completeness2/5

The server's domain appears to be oracle consultation for problem-solving, but with only one tool, there are significant gaps. For example, there are no tools for managing sessions, retrieving past consultations, or handling different reasoning levels, which limits agent workflows and creates dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues