Updated all documentation and configuration files: Documentation changes: - Updated README.md to describe LLMX as LiteLLM-powered fork - Updated CLAUDE.md with LiteLLM integration details - Updated 50+ markdown files across docs/, llmx-rs/, llmx-cli/, sdk/ - Changed all references: codex → llmx, Codex → LLMX - Updated package references: @openai/codex → @llmx/llmx - Updated repository URLs: github.com/openai/codex → github.com/valknar/llmx Configuration changes: - Updated .github/dependabot.yaml - Updated .github workflow files - Updated cliff.toml (changelog configuration) - Updated Cargo.toml comments Key branding updates: - Project description: "coding agent from OpenAI" → "coding agent powered by LiteLLM" - Added attribution to original OpenAI Codex project - Documented LiteLLM integration benefits Files changed: 51 files (559 insertions, 559 deletions) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5.7 KiB
LLMX MCP Server Interface [experimental]
This document describes LLMX’s experimental MCP server interface: a JSON‑RPC API that runs over the Model Context Protocol (MCP) transport to control a local LLMX engine.
- Status: experimental and subject to change without notice
- Server binary:
llmx mcp-server(orllmx-mcp-server) - Transport: standard MCP over stdio (JSON‑RPC 2.0, line‑delimited)
Overview
LLMX exposes a small set of MCP‑compatible methods to create and manage conversations, send user input, receive live events, and handle approval prompts. The types are defined in protocol/src/mcp_protocol.rs and re‑used by the MCP server implementation in mcp-server/.
At a glance:
- Conversations
newConversation→ start a LLMX sessionsendUserMessage/sendUserTurn→ send user input into a conversationinterruptConversation→ stop the current turnlistConversations,resumeConversation,archiveConversation
- Configuration and info
getUserSavedConfig,setDefaultModel,getUserAgent,userInfomodel/list→ enumerate available models and reasoning options
- Auth
account/read,account/login/start,account/login/cancel,account/logout,account/rateLimits/read- notifications:
account/login/completed,account/updated,account/rateLimits/updated
- Utilities
gitDiffToRemote,execOneOffCommand
- Approvals (server → client requests)
applyPatchApproval,execCommandApproval
- Notifications (server → client)
loginChatGptComplete,authStatusChangellmx/eventstream with agent events
See code for full type definitions and exact shapes: protocol/src/mcp_protocol.rs.
Starting the server
Run LLMX as an MCP server and connect an MCP client:
llmx mcp-server | your_mcp_client
For a simple inspection UI, you can also try:
npx @modelcontextprotocol/inspector llmx mcp-server
Use the separate llmx mcp subcommand to manage configured MCP server launchers in config.toml.
Conversations
Start a new session with optional overrides:
Request newConversation params (subset):
model: string model id (e.g. "o3", "gpt-5", "gpt-5-llmx")profile: optional named profilecwd: optional working directoryapprovalPolicy:untrusted|on-request|on-failure|neversandbox:read-only|workspace-write|danger-full-accessconfig: map of additional config overridesbaseInstructions: optional instruction overridecompactPrompt: optional replacement for the default compaction promptincludePlanTool/includeApplyPatchTool: booleans
Response: { conversationId, model, reasoningEffort?, rolloutPath }
Send input to the active turn:
sendUserMessage→ enqueue items to the conversationsendUserTurn→ structured turn with explicitcwd,approvalPolicy,sandboxPolicy,model, optionaleffort, andsummary
Interrupt a running turn: interruptConversation.
List/resume/archive: listConversations, resumeConversation, archiveConversation.
Models
Fetch the catalog of models available in the current LLMX build with model/list. The request accepts optional pagination inputs:
pageSize– number of models to return (defaults to a server-selected value)cursor– opaque string from the previous response’snextCursor
Each response yields:
items– ordered list of models. A model includes:id,model,displayName,descriptionsupportedReasoningEfforts– array of objects with:reasoningEffort– one ofminimal|low|medium|highdescription– human-friendly label for the effort
defaultReasoningEffort– suggested effort for the UIisDefault– whether the model is recommended for most users
nextCursor– pass into the next request to continue paging (optional)
Event stream
While a conversation runs, the server sends notifications:
llmx/eventwith the serialized LLMX event payload. The shape matchescore/src/protocol.rs’sEventandEventMsgtypes. Some notifications include a_meta.requestIdto correlate with the originating request.- Auth notifications via method names
loginChatGptCompleteandauthStatusChange.
Clients should render events and, when present, surface approval requests (see next section).
Approvals (server → client)
When LLMX needs approval to apply changes or run commands, the server issues JSON‑RPC requests to the client:
applyPatchApproval { conversationId, callId, fileChanges, reason?, grantRoot? }execCommandApproval { conversationId, callId, command, cwd, reason? }
The client must reply with { decision: "allow" | "deny" } for each request.
Auth helpers
For the complete request/response shapes and flow examples, see the “Auth endpoints (v2)” section in the app‑server README.
Example: start and send a message
{ "jsonrpc": "2.0", "id": 1, "method": "newConversation", "params": { "model": "gpt-5", "approvalPolicy": "on-request" } }
Server responds:
{ "jsonrpc": "2.0", "id": 1, "result": { "conversationId": "c7b0…", "model": "gpt-5", "rolloutPath": "/path/to/rollout.jsonl" } }
Then send input:
{ "jsonrpc": "2.0", "id": 2, "method": "sendUserMessage", "params": { "conversationId": "c7b0…", "items": [{ "type": "text", "text": "Hello LLMX" }] } }
While processing, the server emits llmx/event notifications containing agent output, approvals, and status updates.
Compatibility and stability
This interface is experimental. Method names, fields, and event shapes may evolve. For the authoritative schema, consult protocol/src/mcp_protocol.rs and the corresponding server wiring in mcp-server/.