An MCP (Model Context Protocol) server that lets Claude talk to other AI models. Use it to chat with models from OpenAI, Google, Anthropic, X.AI, Mistral, DeepSeek, OpenRouter, or Abliteration. You can either talk to one model at a time or get multiple models to weigh in on complex decisions.
📋 Requirements
Converse MCP Server - Converse with other LLMs with chat and consensus tools
2026-11-14
ดาว
—
เครื่องมือ
—
อัปไทม์
—
Node.js: Version 20 or higher
Package Manager: npm (or pnpm/yarn)
API Keys: At least one from any supported provider
🚀 Quick Start
Step 1: Get Your API Keys
You need at least one API key from these providers:
Note: Codex uses your ChatGPT login (not an API key). If you have an active ChatGPT session, Codex will work automatically. For headless/server deployments, set CODEX_API_KEY in your environment.
Step 2: Add to Claude Code or Claude Desktop
For Claude Code (Recommended)
# Add the server with your API keys
claude mcp add converse \
-e OPENAI_API_KEY=your_key_here \
-e GEMINI_API_KEY=your_key_here \
-e XAI_API_KEY=your_key_here \
-e ANTHROPIC_API_KEY=your_key_here \
-e MISTRAL_API_KEY=your_key_here \
-e DEEPSEEK_API_KEY=your_key_here \
-e OPENROUTER_API_KEY=your_key_here \
-e ABLITERATION_API_KEY=ak_your_key_here \
-e ENABLE_RESPONSE_SUMMARIZATION=true \
-e SUMMARIZATION_MODEL=gpt-5-nano \
-s user \
npx converse-mcp-server
For Claude Desktop
Add this configuration to your Claude Desktop settings:
Windows Troubleshooting: If npx converse-mcp-server doesn't work on Windows, try:
{
"command": "cmd",
"args": ["/c", "npx", "converse-mcp-server"],
"env": {
"ENABLE_RESPONSE_SUMMARIZATION": "true",
"SUMMARIZATION_MODEL": "gpt-5-nano"
// ... add your API keys here
}
}
Step 3: Start Using Converse
Once installed, you can:
Chat with a specific model: Ask Claude to use the chat tool with your preferred model
Get consensus: Ask Claude to use the chat tool with mode: "consensus" when you need multiple perspectives
Keep working while models think: In Claude Code v2.1.304+, chat calls run as MCP tasks — they move to the background immediately and the answer arrives as a task notification
Run tasks in background: Use async: true for long-running operations that you can check later
Monitor progress: Use the check_status tool to monitor async operations with AI-generated summaries
Cancel jobs: Use the cancel_job tool to stop running operations
Smart summaries: Get auto-generated titles and summaries for better context understanding
Get help: Type /converse:help in Claude
🛠️ Available Tools
1. Chat Tool
One tool, three modes. Pass a models array and choose a mode. Supports files, images, conversation history, and background execution. The tool routes each model to the right provider by name; "auto" picks the first available provider. When AI summarization is enabled, it generates smart titles and summaries.
// mode "chat" (default) — 1..N models answer independently, in parallel
{
"prompt": "How should I structure the authentication module for this Express.js API?",
"models": ["gemini-2.5-flash"], // Routes to Google
"files": ["/path/to/src/auth.js", "/path/to/config.json"],
"images": ["/path/to/architecture.png"],
"reasoning_effort": "medium"
}
// mode "consensus" — ≥2 models answer, then refine after seeing each other
{
"prompt": "Should we use microservices or a monolith for our e-commerce platform?",
"models": ["gpt-5.6", "gemini-2.5-flash", "grok-4.5"],
"mode": "consensus",
"files": ["/path/to/requirements.md"]
}
// mode "roundtable" — models speak SEQUENTIALLY in the given order, each seeing
// the running transcript. One call = one lap; pass continuation_id for more laps.
{
"prompt": "Critique this caching strategy and propose improvements.",
"models": ["codex", "gemini", "claude"], // ORDER MATTERS
"mode": "roundtable"
}
// Asynchronous execution (for long-running tasks) — any mode
{
"prompt": "Analyze this large codebase and provide optimization recommendations",
"models": ["gpt-5.6"],
"files": ["/path/to/large-project"],
"async": true, // Enables background processing
"continuation_id": "my-analysis-task" // Optional: custom ID for tracking
}
Codex Notes:
Uses thread-based sessions in chat mode (context persists with continuation_id)
Responses typically take 6-20 seconds (complex tasks may take minutes)
Accesses files directly from your working directory
Configure sandbox mode via CODEX_SANDBOX_MODE environment variable
2. Check Status Tool
Monitor the progress and retrieve results from asynchronous operations. When AI summarization is enabled, provides intelligent summaries of ongoing and completed tasks.
// Check status of a specific job
{
"continuation_id": "my-analysis-task"
}
// List recent jobs (shows last 10)
// With summarization enabled, displays titles and final summaries
{}
// Get full conversation history for completed job
{
"continuation_id": "my-analysis-task",
"full_history": true
}
3. Cancel Job Tool
Cancel running asynchronous operations when needed.
// Cancel a running job
{
"continuation_id": "my-analysis-task"
}
4. Decide Tool
Ask a decision model (OpenAI's gpt-6-luna, TypeSafe's Jev, or Cloudflare's Clef) typed questions about a state and get calibrated answers instead of text: a yes probability (noul), a chosen option with per-option probabilities (choice), a rubric position with per-level probabilities (score), or where a target is in an image (box, Jev 1.14). Batch many questions into one call; they are judged in parallel against the same state. Needs any of OPENAI_API_KEY, TYPESAFE_API_KEY, CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN, or OPENROUTER_API_KEY; each model runs on its native host first and falls back to OpenRouter. model: "auto" tries gpt-6-luna, then jev-latest, then clef. Pass images to judge pictures with gpt-6-luna, Jev, or Clef.
{
"state": { "message": "I was charged twice for order A-104. Please fix this ASAP." },
"questions": {
"urgent": { "type": "noul", "instructions": "Does the message convey urgency?" },
"team": { "type": "choice", "instructions": "Which team should handle this?",
"criteria": { "billing": "Payments, refunds", "technical": "Bugs, outages" } },
"frustration": { "type": "score", "instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"] }
}
}
See docs/API.md for the full schema, model routing, and usage guidance.
🤖 AI Summarization Feature
When enabled, the server automatically generates intelligent titles and summaries for better context understanding:
Automatic Title Generation: Creates descriptive titles (up to 60 chars) for each request
Streaming Summaries: Status check returns an up-to-date summary of the progress based on the partially streamed response
Final Summaries: Concise 1-2 sentence summaries of completed responses
Smart Status Display: Enhanced check_status tool shows titles and summaries in job listings
Persistent Context: Summaries are stored with async jobs for better progress tracking
Configuration:
# Enable in your environment
ENABLE_RESPONSE_SUMMARIZATION=true # Default: false
SUMMARIZATION_MODEL=gpt-5-nano # Default: gpt-5-nano
Benefits:
Quickly understand what each async job is doing without reading full responses
Better context when reviewing multiple ongoing operations
Improved job management with at-a-glance understanding of task progress
Graceful fallback to text snippets when summarization is disabled or fails
📊 Supported Models
OpenAI Models
gpt-6.1-sol (default; aliases: gpt-6, gpt-6.1, gpt-5, sol): GPT-6.1 Sol (1M context, 128K output) - Near-Astra coding, computer use, and professional work at a fifth of the Astra price; effort low–max
gpt-6-sol: Previous GPT-6 Sol (1M context, 128K output), reachable by versioned name only; effort none–max
o3-deep-research (30-90 min runtime), o4-mini-deep-research (15-60 min runtime): Deep research models (200K context)
Google/Gemini Models
API Key Options:
GEMINI_API_KEY: For Gemini Developer API (recommended)
GOOGLE_API_KEY: Alternative name (GEMINI_API_KEY takes priority)
Vertex AI: Use GOOGLE_GENAI_USE_VERTEXAI=true with project/location settings
Supported Models:
gemini-4-argon (default; aliases: argon, pro, gemini-pro): Flagship reasoning model for complex software engineering and agentic work; paid API tier only (1M context, 65K output)
gemini-3.1-pro-preview (aliases: gemini-3.1-pro, gemini-3): Gemini 3.1 Pro reasoning with expanded thinking levels (1M context, 64K output)
gemini-3.5-flash (aliases: gemini-3.5, flash-3.5): Frontier-level agentic and coding performance at Flash speed (1M context, 65K output)
gemini-2.5-flash-lite (alias: flash-lite): Lightweight fast model (1M context, 65K output)
Note: The Antigravity CLI provider serves gemini-4-argon and gemini-3.8-flash. Bare pro and gemini-pro resolve to Gemini 4 Argon on Antigravity first, then the Google API as failover; bare gemini-3.1-pro-preview routes to the Google API only. Bare flash and gemini-3.8-flash route to Antigravity first when it is installed (see Model Selection). Use google:<model> to always use the Google API.
X.AI/Grok Models
grok-4.5 (default; aliases: grok, grok-4.5-latest, grok-build-latest): Flagship model with image input, reasoning content, and native web/X search (500K context). Reasoning maps to low/medium/high and cannot be disabled; web search is automatic.
Anthropic Models
claude-opus-5-5 (default; aliases: opus, opus-5.5, claude-opus): Flagship Opus for complex agentic coding and deep reasoning; thinking always on, effort low–max (1M context, 128K output)
claude-fable-5 (alias: fable): Most capable model for demanding reasoning and long-horizon agentic work (1M context, 128K output)
claude-opus-5 (alias: opus-5): Previous Opus generation (1M context, 128K output)
claude-opus-4-8 / claude-opus-4-7 / claude-opus-4-6: Earlier Opus generations with adaptive thinking (200K context, 1M via beta, 128K output)
claude-opus-4-5 / claude-opus-4-1: Legacy Opus models with extended thinking (64K / 32K output)
claude-sonnet-5-5 (aliases: sonnet, sonnet-5.5): Current Sonnet with adaptive thinking and effort (1M context, 128K output)
openrouter/auto: Auto-selects the best model for your prompt
Any other model works via its full provider/model slug or the openrouter: namespace — no extra configuration. Append :online to a slug to opt into web search (adds a real per-request cost).
Abliteration Models
Abliteration provides uncensored ("abliterated") reasoning models through its OpenAI-compatible Chat Completions API at https://api.abliteration.ai/v1; see its documentation. Use the abliteration or ablit namespace; set ABLITERATION_DEFAULT_MODEL to override the default. Web search is not supported.
abliterated-model-large (alias: abliterated-large-v1): Previous large model, GLM-5.2-derived, text-only (1M context, 999,990 max output)
abliterated-model (aliases: abliterated, abliterated-base): Multimodal with image input (256K context, 262,134 max output)
All models reason by default and return reasoning traces (reasoning_content), streamed as thinking. reasoning_effort is clamped to each model's supported levels: large-v2 runs low/high/max and cannot disable reasoning (none/minimal/low → low, medium/high → high, xhigh/max → max); large runs high/max and can disable (none → none, minimal–high → high, xhigh/max → max); base accepts every level, with none disabling reasoning. Only abliterated-model accepts images; image requests to the text-only large models are rejected before sending.
Codex Models
OpenAI Codex agentic coding assistant. codex uses its default model (GPT-6 Astra, or CODEX_DEFAULT_MODEL); codex:<model> picks one (e.g. codex:luna, codex:astra, codex:gpt-5.6-terra):
reasoning_effort maps onto the tiers the chosen backend accepts (versioned GPT-6 Sol, Luna, and GPT-5.6: none through max; GPT-6.1 Sol and GPT-6 Astra: low through max, no none)
Thread-based sessions with persistent context
Direct filesystem access from working directory
Typical response time: 6-20 seconds (longer for complex tasks)
Uses Claude Code CLI authentication (claude login) - no API key needed
Direct filesystem access from working directory
GitHub Copilot SDK Models
Reach these only with the copilot: namespace (e.g. copilot:gpt-6.1-sol) — Copilot never serves bare model names. copilot alone uses GPT-6.1 Sol, or COPILOT_DEFAULT_MODEL. Uses your GitHub Copilot subscription (gh auth login) - no API key needed:
# Required: At least one API key
OPENAI_API_KEY=sk-proj-your_openai_key_here
GEMINI_API_KEY=your_gemini_api_key_here # Or GOOGLE_API_KEY (GEMINI_API_KEY takes priority)
XAI_API_KEY=xai-your_xai_key_here
ANTHROPIC_API_KEY=sk-ant-your_anthropic_key_here
MISTRAL_API_KEY=your_mistral_key_here
DEEPSEEK_API_KEY=your_deepseek_key_here
OPENROUTER_API_KEY=sk-or-your_openrouter_key_here
ABLITERATION_API_KEY=ak_your_key_here
# Optional: Server configuration
PORT=3157
LOG_LEVEL=info
# Optional: AI Summarization (Enhanced async status display)
ENABLE_RESPONSE_SUMMARIZATION=true # Enable AI-generated titles and summaries
SUMMARIZATION_MODEL=gpt-5-nano # Model to use for summarization (default: gpt-5-nano)
# Optional: OpenRouter attribution (for ranking credit; both optional)
OPENROUTER_REFERER=https://github.com/FallDownTheSystem/converse
OPENROUTER_TITLE=Converse
# Optional: Codex configuration
CODEX_API_KEY=your_codex_api_key_here # Optional if ChatGPT login available
CODEX_SANDBOX_MODE=read-only # read-only (default), workspace-write, danger-full-access
CODEX_SKIP_GIT_CHECK=true # true (default), false
CODEX_APPROVAL_POLICY=never # never (default), untrusted, on-failure, on-request
# Optional: per-provider default model, used for a bare provider name (`codex`,
# `openai`, ...) and for "auto". Must be a model or alias from that provider's
# list; startup fails with suggestions otherwise.
CODEX_DEFAULT_MODEL=gpt-6-astra # CODEX_MODEL still works as a fallback
CLAUDE_DEFAULT_MODEL=claude-opus-5-5
AGY_DEFAULT_MODEL=gemini-4-argon # Requires Google AI Ultra; other plans can use gemini:flash or set AGY_DEFAULT_MODEL=gemini-3.8-flash
COPILOT_DEFAULT_MODEL=gpt-6.1-sol # COPILOT_MODEL still works as a fallback
OPENAI_DEFAULT_MODEL=gpt-6.1-sol
GOOGLE_DEFAULT_MODEL=gemini-4-argon
XAI_DEFAULT_MODEL=grok-4.5
ANTHROPIC_DEFAULT_MODEL=claude-opus-5-5
MISTRAL_DEFAULT_MODEL=mistral-medium-3-5
DEEPSEEK_DEFAULT_MODEL=deepseek-v4-pro
OPENROUTER_DEFAULT_MODEL=z-ai/glm-5.2 # any vendor/model slug is accepted
ABLITERATION_DEFAULT_MODEL=abliterated-model-large-v2
Configuration Options
Server Environment Variables (.env file)
Variable
Description
Default
Example
PORT
Server port
3157
3157
LOG_LEVEL
Logging level
info
debug, info, error
Claude Code Environment Variables (System/Global)
These must be set in your system environment or when launching Claude Code, NOT in the project .env file:
Variable
Description
Default
Example
MAX_MCP_OUTPUT_TOKENS
Token response limit
25000
200000
MCP_TOOL_TIMEOUT
Wall-clock limit per tool call (ms)
~28 hours when unset
7200000 (2 h)
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT
Idle window (ms) — aborts a call that produces no output for this long
30 min (stdio) / 5 min (HTTP)
3600000 (60 min)
# Example: Set globally before starting Claude Code
export MAX_MCP_OUTPUT_TOKENS=200000
export CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT=3600000 # 60 min for long silent agentic calls
claude # Then start Claude Code
The idle timeout is usually what kills long calls. Agentic models (Codex, Claude Agent SDK) can work silently for 30+ minutes; Converse holds one MCP request open the whole time, and Claude Code aborts it after the idle window with an error like "failed after 30 minutes of silence. The idle timeout aborted it." Progress-notification heartbeats can't prevent this — Claude Code doesn't send a progressToken on tools/call, so an MCP server has no spec-compliant way to emit them (claude-code#58687). Raising the idle window is the only fix.
Codex CLI Tool Timeout
If you register Converse in OpenAI's Codex CLI, note that Codex enforces its own hard 300-second default per MCP tool call (tool_timeout_sec, undocumented — it exists only in Codex's config schema). Progress notifications don't extend it. Raise it in ~/.codex/config.toml:
[mcp_servers.converse]
# ... command/env ...
tool_timeout_sec = 3600 # default 300 kills long calls at 5 minutes
Model Selection
Every entry in models takes one of four forms:
// Auto-selection (recommended): the first available provider's default model
"auto";
// A provider: its default model (hardcoded, or <PROVIDER>_DEFAULT_MODEL)
"codex"; // -> Codex (GPT-6 Astra)
"claude"; // -> Claude Agent SDK (Claude Opus 5.5)
"gemini"; // -> Antigravity CLI (Gemini 4 Argon)
"openai"; // -> OpenAI API (GPT-6.1 Sol)
// provider:model — that model on that provider only
"codex:astra"; // -> Codex (GPT-6 Astra)
"openai:gpt-6-astra"; // -> OpenAI API, even when Codex is available
"gemini:pro"; // -> Antigravity CLI (Gemini 4 Argon)
"google:gemini-3.1-pro-preview"; // -> Google API
"copilot:sonnet"; // -> GitHub Copilot (Claude Sonnet 5.5)
"openrouter:z-ai/glm-5.2:online"; // -> OpenRouter with web search opt-in
// A bare model ID or alias — the first configured provider that offers it
"gpt-6-astra"; // -> Codex, else OpenAI API
"opus"; // -> Claude Agent SDK, else Anthropic API
"pro"; // -> Antigravity CLI (gemini-4-argon), else Google API
"grok"; // -> grok-4.5 (XAI)
"z-ai/glm-5.2"; // -> OpenRouter (any vendor/model slug)
Bare model names go to the first provider, in the order below, whose model list contains the name and that is set up (API key present; for Codex and Claude, a login file or token; for Antigravity, the agy binary). If that provider then fails with an authentication or availability error, the next provider that serves the same model takes over — a provider whose alias of that name points at a different model is never substituted (bare fable is Fable 5.1 on the Claude Agent SDK and Fable 5 on the Anthropic API, so it does not fail over between them). Copilot is never picked for bare names; use copilot:<model>.
Unknown names are rejected, never guessed: a typo or an unlisted model returns an error with up to three close matches, e.g. Unknown model "gtp-6-astra". Did you mean: gpt-6-astra? or Unknown openai model "spark" in "openai:spark". Did you mean: codex:spark?. OpenRouter is the exception for full vendor/model slugs, which are checked against OpenRouter's live catalog.
Auto Model Behavior:
chat mode: ["auto"] selects the first available provider and uses its default model, failing over down the list
consensus mode: ["auto"] automatically expands to the first 3 available providers
roundtable mode: ["auto"] uses the first available provider
Provider priority order (subscription-based local providers first, then API-key providers), used by both auto and bare model names:
Local agent permissions: Bare model names and auto reach the local agent providers whenever they are set up, not only when named explicitly. The Antigravity CLI runs agy with --dangerously-skip-permissions because headless calls cannot prompt for tool approval — every tool request is auto-approved, including shell commands and file writes. The Claude Agent SDK runs with bypassPermissions. Codex uses CODEX_SANDBOX_MODE (read-only by default). A read-only prompt is not an enforced security boundary for these providers, so use them only with trusted prompts and context. To keep a request on a plain API, name the provider: google:pro, anthropic:opus, openai:gpt-6-astra.
Important: HTTP transport requires the server to be running before Claude can connect to it. Keep the terminal with the server open while using Claude.
Configuration File Locations
The Claude configuration file is typically located at:
Long tool calls aborted mid-run (idle/timeout errors):
The abort almost always comes from the MCP client, not Converse — Converse's own limits are 30 min per provider call and 90 min per async job.
Claude Code: raise CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT (idle window, default 30 min stdio / 5 min HTTP) and check MCP_TOOL_TIMEOUT (wall-clock). See Claude Code Environment Variables.
Codex CLI: set tool_timeout_sec under [mcp_servers.converse] in ~/.codex/config.toml — the undocumented default is 300 seconds.
Immune alternative: run the call with async: true and poll check_status — each poll is a fresh short request, so no client timeout applies.
Debug Mode
# Enable debug logging
LOG_LEVEL=debug npm run dev
# Start with debugger
npm run debug
# Trace all operations
LOG_LEVEL=trace npm run dev
🔧 Development
Getting Started
# Clone the repository
git clone https://github.com/FallDownTheSystem/converse.git
cd converse
npm install
# Copy environment file and add your API keys
cp .env.example .env
# Start development server
npm run dev
Scripts Available
# Server management
npm start # Start server (auto-kills existing server on port 3157)
npm run start:clean # Start server without killing existing processes
npm run start:port # Start server on port 3001 (avoids port conflicts)
npm run dev # Development with hot reload (auto-kills existing server)
npm run dev:clean # Development without killing existing processes
npm run dev:port # Development on port 3001 (avoids port conflicts)
npm run dev:quiet # Development with minimal logging
npm run kill-server # Kill any server running on port 3157
# Testing
npm test # Run all tests
npm run test:unit # Unit tests only
npm run test:integration # Integration tests
npm run test:e2e # End-to-end tests (requires API keys)
# Integration test subcategories
npm run test:integration:mcp # MCP protocol tests
npm run test:integration:tools # Tool integration tests
npm run test:integration:providers # Provider integration tests
npm run test:integration:performance # Performance tests
npm run test:integration:general # General integration tests
# Other test categories
npm run test:mcp-client # MCP client tests (HTTP-based)
npm run test:providers # Provider unit tests
npm run test:tools # Tool tests
npm run test:coverage # Coverage report
npm run test:watch # Run tests in watch mode
# Code quality
npm run lint # Check code style
npm run lint:fix # Fix code style issues
npm run format # Format code with ESLint (alias for lint:fix)
npm run validate # Full validation (lint + test)
# Utilities
npm run build # Build for production
npm run debug # Start with debugger
npm run check-deps # Check for outdated dependencies
npm run kill-server # Kill any server running on port 3157
Development Notes
Port conflicts: The server uses port 3157 by default. If you get an "EADDRINUSE" error:
Run npm run kill-server to free the port
Or use a different port: PORT=3001 npm start
Transport Modes:
Stdio (default): Works automatically with Claude
HTTP: Better for debugging, requires manual start (MCP_TRANSPORT=http npm run dev)
Testing with Real APIs
After setting up your API keys in .env:
# Run end-to-end tests
npm run test:e2e
# Test specific providers
npm run test:integration:providers
# Full validation
npm run validate
Validation Steps
After installation, run these tests to verify everything works:
npm start # Should show startup message
npm test # Should pass all unit tests
npm run validate # Full validation suite
Note: This section is for maintainers. The package is already published as converse-mcp-server.
Quick Publishing Checklist
# 1. Ensure clean working directory
git status
# 2. Run full validation
npm run validate
# 3. Test package contents
npm pack --dry-run
# 4. Test bin script
node bin/converse.js --help
# 5. Bump version (choose one)
npm version patch # Bug fixes: 1.0.1 → 1.0.2
npm version minor # New features: 1.0.1 → 1.1.0
npm version major # Breaking changes: 1.0.1 → 2.0.0
# 6. Test publish (dry run)
npm publish --dry-run
# 7. Publish to npm
npm publish
# 8. Verify publication
npm view converse-mcp-server
npx converse-mcp-server --help
Version Guidelines
Patch (npm version patch): Bug fixes, documentation updates, minor improvements
Minor (npm version minor): New features, new model support, new tool capabilities
Major (npm version major): Breaking API changes, major architecture changes
Post-Publication
After publishing, update installation instructions if needed and verify:
# Test direct execution
npx converse-mcp-server
npx converse
# Test MCP client integration
# Update Claude Desktop config to use: "npx converse-mcp-server"
Troubleshooting Publication
Git not clean: Commit all changes first
Tests failing: Fix issues before publishing
Version conflicts: Check existing versions with npm view converse-mcp-server versions
Permission issues: Ensure you're logged in with npm whoami
🤝 Contributing
Fork the repository
Create a feature branch: git checkout -b feature/amazing-feature