Unison MCP Server

Un servidor MCP para el lenguaje Unison, que permite a los asistentes de IA interactuar con el Unison Codebase Manager (UCM).

Documentación

unison-mcp-server

Implementación del servidor Model Context Protocol (MCP) para el lenguaje Unison. Permite que los asistentes de IA operen UCM (Unison Codebase Manager).

Resumen

Este proyecto proporciona una interfaz MCP para interactuar con el codebase de Unison, permitiendo que los asistentes de IA realicen las siguientes operaciones:

  • Búsqueda de definiciones
  • Adición y actualización de código
  • Ejecución de expresiones de Unison
  • Gestión de proyectos y ramas
  • Análisis de dependencias

Requisitos previos

1. Instalación de Unison

# macOS (Homebrew)
brew install unisonweb/unison/unison-language

# その他のOS
# https://www.unison-lang.org/install/ から最新版をダウンロード

2. Configuración de Haskell

# Stack(Haskellビルドツール)のインストール
curl -sSL https://get.haskellstack.org/ | sh

# または
wget -qO- https://get.haskellstack.org/ | sh

Configuración

1. Clonar el repositorio

git clone https://github.com/yourusername/unison-mcp-server.git
cd unison-mcp-server

2. Compilación

stack build

3. Registro en Claude Desktop

Configuración manual

Agregue lo siguiente a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o a la ruta correspondiente:

{
  "mcpServers": {
    "unison": {
      "command": "/path/to/unison-mcp-server/.stack-work/install/.../bin/unison-mcp-server-exe",
      "args": ["/path/to/your/unison/project"]
    }
  }
}

Usando claude mcp add (recomendado)

# ビルドしたバイナリのパスを確認
stack path --local-install-root

# Claude MCP に追加
claude mcp add unison /path/to/binary/unison-mcp-server-exe /path/to/your/unison/project

Uso

Configuración inicial

Para iniciar un nuevo proyecto de Unison:

# ターミナルで
cd /path/to/your/unison/project
ucm

# UCM内で
.myproject> project.create myproject

Integración con UCM

Para iniciar UCM usando el mismo codebase que el servidor MCP:

# MCPサーバーのディレクトリから起動
cd /path/to/unison-mcp-server
ucm

# または、どこからでも --codebase オプションを使用
ucm --codebase /path/to/unison-mcp-server/.unison

Esto le permite acceder al mismo proyecto y rama que el servidor MCP.

Ejemplo de uso con Claude

Use un prompt como el siguiente en Claude Desktop:

unison mcp を使ってコードを書いてみて

Demostración de ejecución

A continuación se muestra un ejemplo de uso real:

-- 基本的な関数定義
id : a -> a
id x = x

-- リスト操作
head : [a] -> Optional a
head = cases
  [] -> None
  x +: _ -> Some x

-- 高階関数
map : (a -> b) -> [a] -> [b]
map f = cases
  [] -> []
  x +: xs -> f x +: map f xs

-- フィルター関数
filter : (a -> Boolean) -> [a] -> [a]
filter p = cases
  [] -> []
  x +: xs -> if p x then x +: filter p xs else filter p xs

Arquitectura

┌─────────────┐     JSON-RPC      ┌──────────────┐
│ AI Assistant│ ←───────────────→ │  MCP Server  │
└─────────────┘                   └──────┬───────┘
                                         │
                                         v
                                   ┌─────────────┐
                                   │     UCM     │
                                   └─────────────┘

Herramientas disponibles

Las siguientes herramientas están disponibles como herramientas MCP:

Operaciones básicas

  • mcp__unison__ucm_find - Búsqueda de definiciones
  • mcp__unison__ucm_add - Agregar nuevas definiciones
  • mcp__unison__ucm_run - Ejecutar expresiones de Unison
  • mcp__unison__ucm_view - Mostrar el código fuente de una definición
  • mcp__unison__ucm_update - Actualizar definiciones existentes
  • mcp__unison__ucm_ls - Listar el contenido de un namespace
  • mcp__unison__ucm_delete - Eliminar definiciones
  • mcp__unison__ucm_test - Ejecutar pruebas (genera automáticamente scratch.u si no existe)
  • mcp__unison__ucm_dependencies - Mostrar dependencias de una definición

Gestión de proyectos

  • mcp__unison__ucm_list_projects - Lista de proyectos
  • mcp__unison__ucm_switch_project - Cambiar de proyecto
  • mcp__unison__ucm_project_create - Crear nuevo proyecto
  • mcp__unison__ucm_list_branches - Lista de ramas
  • mcp__unison__ucm_switch_branch - Cambiar de rama
  • mcp__unison__ucm_branch_create - Crear nueva rama
  • mcp__unison__ucm_merge - Fusionar ramas

Gestión de bibliotecas

  • mcp__unison__ucm_lib_install - Instalar bibliotecas (ejemplo: @unison/base)
  • mcp__unison__ucm_share_search - Mostrar información de bibliotecas de Unison Share (la búsqueda real no está soportada)
  • mcp__unison__ucm_share_install - Instalar una versión específica desde Unison Share
  • Después de la instalación: verifique especificando "lib" con mcp__unison__ucm_ls
  • Convención de nombres: @owner/library → lib.owner_library_version

Ejecución de comandos genéricos

  • mcp__unison__ucm_command - Ejecutar cualquier comando UCM directamente
    • Herramienta de bajo nivel: verifique la sintaxis del comando y los requisitos de tipo antes de usarla
    • Los errores de UCM se devuelven tal cual
    • Ejemplo: {"command": "pull", "args": ["@unison/base/main"]}
    • Ejemplo: {"command": "fork", "args": ["testUuid", "myTests.uuid"]}
    • También puede admitir comandos UCM que se agreguen en el futuro

Ejemplo de uso de bibliotecas

-- baseライブラリをインストール後
use lib.unison_base_3_21_0

-- UUIDの生成
testUuid : '{IO, Exception} ()
testUuid = do
  uuid = Uuid.parse "550e8400-e29b-41d4-a716-446655440000"
  printLine (Uuid.toText uuid)

-- nanoidライブラリをインストール後
use lib.hojberg_nanoid_1_0_0
use lib.hojberg_nanoid_1_0_0.NanoId

-- NanoIDの生成
testNanoId : '{IO, Exception} ()
testNanoId = do
  id = nanoid()
  printLine (NanoId.toText id)

Solución de problemas

Si no se encuentra UCM

# PATHにUCMがあるか確認
which ucm

# なければPATHに追加
export PATH=$PATH:/path/to/unison/bin

Si hay errores de compilación

# 依存関係を更新
stack update

# クリーンビルド
stack clean
stack build

Si hay errores de conexión MCP

  1. Verifique que la ruta del binario sea correcta
  2. Verifique que el directorio del proyecto exista
  3. Verifique que UCM funcione correctamente

Desarrollo

Estructura del proyecto:

  • src/Unison/MCP/Server.hs - Implementación del servidor MCP
  • src/Unison/MCP/Protocol.hs - Definiciones de tipos del protocolo MCP
  • src/Unison/MCP/Tools.hs - Implementación de herramientas
  • src/Unison/MCP/UCM.hs - Capa de integración con UCM

Licencia

Este proyecto se publica bajo la licencia MIT.