Passer au contenu principal
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

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

Démarrer OpenCode

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 :
{
  "$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 npmType d’APICas d’utilisation
@ai-sdk/openai-compatibleChat Completion APILa plupart des modèles, tels que GPT et Claude
@ai-sdk/openaiResponse APIModè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. opencode_input_api_key

Commencer à utiliser

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

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.
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())

  1. Ajoutez le mcp local dans opencode.json.
{
  "mcp": {
    "calc_mcp": {
      "type": "local",
      "command": ["python3", "{your_local_path}/calc_mcp.py"],
      "enabled": true
    }
  }
}
  1. Utilisez /mcps pour vérifier l’état de connexion du mcp. Lorsqu’il est à l’état Enabled, vous pouvez demander à opencode de l’appeler.
opencode_mcp