> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jiekou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenCode

OpenCode est un agent de programmation IA open source (Coding Agent) destiné aux développeurs, axé sur une expérience « native du terminal » : via une TUI/CLI, il permet d’effectuer dans la ligne de commande des workflows tels que la discussion autour des besoins, la génération de code, la refactorisation, l’explication et le débogage. Il met l’accent sur l’indépendance vis-à-vis des modèles et peut se connecter à de nombreux services de modèles comme Claude, GPT ou Gemini. Il prend également en charge les interfaces locales ou compatibles OpenAI, ce qui permet d’arbitrer librement entre coût, qualité et confidentialité. OpenCode fournit aussi un mécanisme extensible de plugins/outils ainsi qu’un système de configuration, permettant d’intégrer le contexte du projet, l’exécution de commandes et d’autres capacités dans des processus automatisés. Il convient aux utilisateurs intensifs du terminal et aux équipes souhaitant personnaliser leurs workflows de programmation IA.

# Installation et intégration

## Installation

```bash theme={null}
curl -fsSL https://opencode.ai/install | bash
```

Pour les autres méthodes d’installation, consultez le site officiel d’OpenCode : [https://opencode.ai/docs/#install](https://opencode.ai/docs/#install)

## Démarrer OpenCode

```bash theme={null}
cd /path/to/project  # 进入项目路径

opencode  # 启动 OpenCode
```

## Intégrer l’API JieKou

* Configuration globale : \~/.config/opencode/opencode.json
* Configuration du projet : opencode.json à la racine du projet

(S’il n’existe pas de fichier opencode.json, vous pouvez le créer manuellement.)

La configuration est la suivante :

```JSON theme={null}
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "myprovider": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "JieKou",
      "options": {
        "baseURL": "https://api.highwayapi.ai/openai/v1"
      },
      "models": {
        "claude-sonnet-4-5-20250929": {
          "name": "claude-sonnet-4-5-20250929"
        },
        "gpt-5.2": {
          "name": "gpt-5.2"
        },
      }
    }
  }
}
```

Lors de la configuration d’un fournisseur tiers, veillez à choisir le bon package npm :

| **Package npm**           | **Type d’API**      | **Cas d’utilisation**                          |
| ------------------------- | ------------------- | ---------------------------------------------- |
| @ai-sdk/openai-compatible | Chat Completion API | La plupart des modèles, tels que GPT et Claude |
| @ai-sdk/openai            | Response API        | Modèles de la série Codex                      |

**Remarque :** les modèles Codex (comme gpt-5.1-codex) doivent utiliser @ai-sdk/openai (Response API), tandis que les autres modèles utilisent @ai-sdk/openai-compatible (Chat Completion API).

## Configurer la clé API

Entrez dans opencode, utilisez `/connect` pour sélectionner le fournisseur, puis saisissez votre API KEY et appuyez sur Entrée pour confirmer.

<img src="https://mintcdn.com/jiekou/bJU72HTfng2lje71/images/opencode_input_api_key.png?fit=max&auto=format&n=bJU72HTfng2lje71&q=85&s=ba2286037bc70e0b1bec8715ac2551e5" alt="opencode_input_api_key" width="858" height="328" data-path="images/opencode_input_api_key.png" />

## Commencer à utiliser

Après avoir connecté le fournisseur, vous pouvez utiliser la commande `/models` pour sélectionner un modèle.

<img src="https://mintcdn.com/jiekou/bJU72HTfng2lje71/images/opencode_choose_model.png?fit=max&auto=format&n=bJU72HTfng2lje71&q=85&s=510e971bbf2f3a5b0faf6ffda2d969d1" alt="opencode_choose_model" width="848" height="888" data-path="images/opencode_choose_model.png" />

# Autres utilisations

## Exemple : configuration MCP locale (avec un MCP de calcul comme exemple)

1. Utilisez python + MCP SDK pour écrire le code du serveur mcp de calculatrice, puis enregistrez-le dans un chemin local.

```python theme={null}
import asyncio
import math
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent

# Create server instance
server = Server("calculator")

@server.list_tools()
async def list_tools() -> list[Tool]:
    """List available calculator tools."""
    return [
        Tool(
            name="add",
            description="Add two numbers",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "First number"},
                    "b": {"type": "number", "description": "Second number"},
                },
                "required": ["a", "b"],
            },
        ),
        Tool(
            name="subtract",
            description="Subtract second number from first number",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "First number"},
                    "b": {"type": "number", "description": "Second number to subtract"},
                },
                "required": ["a", "b"],
            },
        ),
        Tool(
            name="multiply",
            description="Multiply two numbers",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "First number"},
                    "b": {"type": "number", "description": "Second number"},
                },
                "required": ["a", "b"],
            },
        ),
        Tool(
            name="divide",
            description="Divide first number by second number",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "Dividend"},
                    "b": {"type": "number", "description": "Divisor"},
                },
                "required": ["a", "b"],
            },
        ),
        Tool(
            name="power",
            description="Raise a number to a power",
            inputSchema={
                "type": "object",
                "properties": {
                    "base": {"type": "number", "description": "Base number"},
                    "exponent": {"type": "number", "description": "Exponent"},
                },
                "required": ["base", "exponent"],
            },
        ),
        Tool(
            name="sqrt",
            description="Calculate square root of a number",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "Number to calculate square root of"},
                },
                "required": ["a"],
            },
        ),
        Tool(
            name="modulo",
            description="Calculate remainder of division",
            inputSchema={
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "Dividend"},
                    "b": {"type": "number", "description": "Divisor"},
                },
                "required": ["a", "b"],
            },
        ),
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    """Handle tool calls for calculator operations."""
    try:
        if name == "add":
            result = arguments["a"] + arguments["b"]
        elif name == "subtract":
            result = arguments["a"] - arguments["b"]
        elif name == "multiply":
            result = arguments["a"] * arguments["b"]
        elif name == "divide":
            if arguments["b"] == 0:
                return [TextContent(type="text", text="Error: Division by zero")]
            result = arguments["a"] / arguments["b"]
        elif name == "power":
            result = math.pow(arguments["base"], arguments["exponent"])
        elif name == "sqrt":
            if arguments["a"] < 0:
                return [TextContent(type="text", text="Error: Cannot calculate square root of negative number")]
            result = math.sqrt(arguments["a"])
        elif name == "modulo":
            if arguments["b"] == 0:
                return [TextContent(type="text", text="Error: Modulo by zero")]
            result = arguments["a"] % arguments["b"]
        else:
            return [TextContent(type="text", text=f"Error: Unknown tool '{name}'")]

        return [TextContent(type="text", text=str(result))]

    except Exception as e:
        return [TextContent(type="text", text=f"Error: {str(e)}")]

async def main():
    """Run the calculator MCP server."""
    async with stdio_server() as (read_stream, write_stream):
        await server.run(read_stream, write_stream, server.create_initialization_options())

if __name__ == "__main__":
    asyncio.run(main())

```

2. Ajoutez le mcp local dans opencode.json.

```json theme={null}
{
  "mcp": {
    "calc_mcp": {
      "type": "local",
      "command": ["python3", "{your_local_path}/calc_mcp.py"],
      "enabled": true
    }
  }
}
```

3. Utilisez `/mcps` pour vérifier l’état de connexion du mcp. Lorsqu’il est à l’état Enabled, vous pouvez demander à opencode de l’appeler.

<img src="https://mintcdn.com/jiekou/bJU72HTfng2lje71/images/opencode_mcp.png?fit=max&auto=format&n=bJU72HTfng2lje71&q=85&s=5eb031be2a6e8473a035c9da31b1b777" alt="opencode_mcp" width="860" height="370" data-path="images/opencode_mcp.png" />
