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 definicionesmcp__unison__ucm_add- Agregar nuevas definicionesmcp__unison__ucm_run- Ejecutar expresiones de Unisonmcp__unison__ucm_view- Mostrar el código fuente de una definiciónmcp__unison__ucm_update- Actualizar definiciones existentesmcp__unison__ucm_ls- Listar el contenido de un namespacemcp__unison__ucm_delete- Eliminar definicionesmcp__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 proyectosmcp__unison__ucm_switch_project- Cambiar de proyectomcp__unison__ucm_project_create- Crear nuevo proyectomcp__unison__ucm_list_branches- Lista de ramasmcp__unison__ucm_switch_branch- Cambiar de ramamcp__unison__ucm_branch_create- Crear nueva ramamcp__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
- Verifique que la ruta del binario sea correcta
- Verifique que el directorio del proyecto exista
- Verifique que UCM funcione correctamente
Desarrollo
Estructura del proyecto:
src/Unison/MCP/Server.hs- Implementación del servidor MCPsrc/Unison/MCP/Protocol.hs- Definiciones de tipos del protocolo MCPsrc/Unison/MCP/Tools.hs- Implementación de herramientassrc/Unison/MCP/UCM.hs- Capa de integración con UCM
Licencia
Este proyecto se publica bajo la licencia MIT.