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

An MCP (Model Context Protocol) server for connecting AI agents to multiple LLM models. Supports conversation history, model switching, and seamless Claude Code integration.

## Features

- Multi-model support (OpenAI, OpenRouter, custom endpoints)
- Conversation history management
- Switch models mid-conversation
- Extended thinking/reasoning support (configurable by provider)
- Pure MCP protocol (silent by default)
- Automatic server management

## Installation

```bash
npm install -g polybrain
# or
pnpm add -g polybrain
```

## Quick Setup

### 1. Configure Models

**Option A: YAML (recommended)**

Create `~/.polybrain.yaml`:
```yaml
models:
  - id: "gpt-4o"
    modelName: "gpt-4o"
    baseUrl: "https://api.openai.com/v1"
    apiKey: "${OPENAI_API_KEY}"
    provider: "openai"

  - id: "gpt-5.1"
    modelName: "openai/gpt-5.1"
    baseUrl: "https://openrouter.io/api/v1"
    apiKey: "${OPENROUTER_KEY}"
    provider: "openrouter"
```

Set env vars:
```bash
export OPENAI_API_KEY="sk-..."
export OPENROUTER_KEY="sk-or-..."
```

**Option B: Environment variables**

```bash
export POLYBRAIN_BASE_URL="https://api.openai.com/v1"
export POLYBRAIN_API_KEY="sk-..."
export POLYBRAIN_MODEL_NAME="gpt-4o"
```

### 2. Coding Agent Integration

#### Claude Code

Run the following command to add Polybrain to Claude Code:

```bash
claude mcp add -s user -t stdio polybrain -- polybrain
```

#### OpenAI Codex

Open `~/.codex/config.toml` and add:

```toml
[mcpServers.polybrain]
command = "polybrain"
```

## Usage

You can now ask your coding agent to consult specific models. For example:

> "Ask deepseek what's the best way to install python on mac"

Or:

> "What models are available from polybrain?"

## Configuration Reference

### Environment Variables

- `POLYBRAIN_BASE_URL` - LLM API base URL
- `POLYBRAIN_API_KEY` - API key
- `POLYBRAIN_MODEL_NAME` - Model name
- `POLYBRAIN_HTTP_PORT` - Server port (default: 32701)
- `POLYBRAIN_LOG_LEVEL` - Log level (default: info)
- `POLYBRAIN_DEBUG` - Enable debug logging to stderr
- `POLYBRAIN_CONFIG_PATH` - Custom config file path

### YAML Config Fields

```yaml
httpPort: 32701                    # Optional
truncateLimit: 500                 # Optional
logLevel: info                      # Optional

models:                             # Required
  - id: "model-id"                 # Internal ID
    modelName: "actual-model-name"  # API model name
    baseUrl: "https://api.url/v1"  # API endpoint
    apiKey: "key or ${ENV_VAR}"    # API key
    provider: "openai"              # Optional: provider type for reasoning support
```

### Supported Providers

The `provider` field enables provider-specific features like extended thinking/reasoning. If not specified, reasoning parameters will not be passed to the API (safe default).

| Provider | Reasoning Support | Valid Values |
|----------|-------------------|--------------|
| OpenAI | YES | `"openai"` |
| OpenRouter | VARIES | `"openrouter"` |

**Examples:**
- Use `provider: "openai"` for OpenAI API models (GPT-4, o-series)
- Use `provider: "openrouter"` for OpenRouter proxy service (supports 400+ models)
- Omit `provider` field if your endpoint doesn't support reasoning parameters

**Example with reasoning:**
```yaml
models:
  - id: "gpt-o1"
    modelName: "o1"
    baseUrl: "https://api.openai.com/v1"
    apiKey: "${OPENAI_API_KEY}"
    provider: "openai"           # Enables reasoning support

  - id: "gpt-5.1"
    modelName: "openai/gpt-5.1"
    baseUrl: "https://openrouter.io/api/v1"
    apiKey: "${OPENROUTER_KEY}"
    provider: "openrouter"       # Enables reasoning support
```

To use reasoning, set `reasoning: true` in the chat tool call. If the model and provider support it, you'll receive both the response and reasoning content.

## Development

### Setup
```bash
pnpm install
```

### Build
```bash
pnpm build
```

### Lint & Format
```bash
pnpm lint
pnpm format
```

### Type Check
```bash
pnpm type-check
```

### Development Mode
```bash
pnpm dev
```

## Project Structure

```
src/
├── bin/polybrain.ts    # CLI entry point
├── launcher.ts         # Server launcher & management
├── http-server.ts      # HTTP server
├── index.ts            # Main server logic
├── mcp-tools.ts        # MCP tool definitions
├── conversation-manager.ts
├── openai-client.ts
├── config.ts
├── logger.ts
└── types.ts
```

## Debugging

Enable debug logs to stderr:
```json
{
  "mcpServers": {
    "polybrain": {
      "command": "polybrain",
      "env": {
        "POLYBRAIN_DEBUG": "true"
      }
    }
  }
}
```

## Restart Server

After changing configuration in `~/.polybrain.yaml`, restart the HTTP backend server:

```bash
polybrain --restart
```

This kills the background HTTP server. The next time you use polybrain, it will automatically start a fresh server with the updated configuration.

## License

MIT

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct, non-overlapping purpose: 'chat' handles message sending and conversation management, 'conversation_history' retrieves past discussions, and 'list_models' provides available model options. There is no ambiguity or confusion between their functions.

Naming Consistency4/5

Two tools follow a clear verb_noun pattern ('list_models', 'conversation_history'), while 'chat' uses a simple noun. This minor deviation is readable and doesn't hinder understanding, but it breaks full consistency.

Tool Count4/5

With 3 tools, the count is reasonable for a chat/LLM interaction server, covering core operations like messaging, history viewing, and model listing. It might benefit from additional tools (e.g., for conversation deletion), but it's well-scoped for its purpose.

Completeness4/5

The tools provide essential CRUD-like coverage for chat interactions: create/continue conversations, read history, and list models. A minor gap exists in operations like deleting conversations or managing conversation metadata, but agents can work around this.

Maintenance

ActivityInactive
ResponsivenessNo issues